【uniapp】在UniApp中实现持久化存储:安卓--生成写入数据为jsontxt
在移动应用开发中,数据存储是一个至关重要的环节。对于使用UniApp开发的Android应用来说,缓存(Cache)是一种常见的数据存储方式,它能够提高应用的性能和用户体验。然而,缓存数据在用户清除缓存或清除应用数据后会被删除。如果你的应用需要在这些操作后仍然保留某些关键数据,就需要考虑其他持久化存储方案。
uniapp调用示例传送门
本文将介绍如何利用H5plus的native功能,通过引入Java类,将数据存储到本地文件中,从而实现数据的持久化。
目录
- 为什么选择本地文件存储?
- 实现步骤
- 1. 引入必要的Java类
- 2. 读取本地文件
- 3. 写入本地文件
- 4. 权限设置
- 总结
为什么选择本地文件存储?
在UniApp中,数据通常以缓存的形式存储在本地。这种方式虽然简便且高效,但存在一个明显的缺点:缓存数据容易被用户清除。当用户在应用设置中清除缓存或清除应用数据时,所有缓存的数据都会丢失。如果你的应用需要保留一些关键数据,例如用户设置、配置信息或重要的用户数据,那么就需要一种更持久的数据存储方式。
本地文件存储提供了一种可靠的解决方案。通过将数据写入设备的文件系统中,即使缓存被清除,这些文件依然存在,数据得以保留。
实现步骤
1. 引入必要的Java类
由于我们需要在Android环境中操作文件系统,因此需要使用Java的IO类。通过H5plus的plus.android.importClass方法,我们可以导入这些类:
const File = plus.android.importClass('java.io.File');
const BufferedReader = plus.android.importClass('java.io.BufferedReader');
const FileReader = plus.android.importClass('java.io.FileReader');
const FileWriter = plus.android.importClass('java.io.FileWriter');
2. 读取本地文件
以下是一个读取本地JSON文件的函数:
function readJsonByFile(fileNamePath) {const readFr = new File(fileNamePath);try {const reader = new BufferedReader(new FileReader(readFr));let txt;let retxt = '';let flag = true;while (flag) {txt = reader.readLine(); // 读取文件if (txt == null) {flag = false;break;}retxt += txt;}return retxt;} catch (e) {console.log(e);return '';}
}
使用示例:
const settingJsonPath = '/storage/emulated/0/Download/你的文件夹/配置.json';
const jsonData = readJsonByFile(settingJsonPath);
console.log(jsonData);
3. 写入本地文件
以下是一个写入本地JSON文件的函数:
function writeJsonToFile(json, fileNamePath) {try {// 创建目录const n = fileNamePath.lastIndexOf('/');if (n !== -1) {const fileDirs = fileNamePath.substring(0, n);console.log(fileDirs);const directory = new File(fileDirs);if (!directory.exists()) {const a = directory.mkdirs(); // 不存在创建目录console.log(a);}}// 创建文件const file = new File(fileNamePath);if (!file.exists()) {file.createNewFile(); // 创建文件}// 写入文件const fos = new FileWriter(fileNamePath, false);fos.write(json);fos.close();return true;} catch (e) {console.log(e);return false;}
}
使用示例:
const settingJsonPath = '/storage/emulated/0/Download/你的文件夹/配置.json';
const jsonData = {"主键": "值","数组": [1, 2, 3],"嵌套对象": {"子键": "子值"}
};
const success = writeJsonToFile(JSON.stringify(jsonData), settingJsonPath);
if (success) {console.log("文件写入成功");
} else {console.log("文件写入失败");
}
4. 权限设置
在Android 6.0(API 23)及以上版本,存储权限需要动态申请。即使你在manifest中声明了存储权限,用户仍然需要在运行时授予权限。以下是申请存储权限的示例:
// 请求存储权限
plus.android.requestPermissions(["android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE"],function(e) {if (e.granted) {console.log("权限已授予");} else {console.log("权限被拒绝");}},function(e) {console.log("请求权限失败");}
);

注意事项:
- 路径选择:从Android 11(API 30)开始,访问外部存储的规则有所变化。建议使用应用专属的目录,例如
/storage/emulated/0/Android/data/你的包名/files/,以避免权限问题。 - 错误处理:在实际应用中,建议添加更多的错误处理逻辑,例如处理文件不存在、读写失败等情况。
- 数据格式:确保写入和读取的数据格式一致,避免因格式不匹配导致的数据解析错误。
总结
通过将数据存储在本地文件中,你可以确保关键数据在用户清除缓存或清除应用数据后依然存在。这种方法不仅适用于UniApp,也适用于其他跨平台开发框架。关键在于合理利用原生功能,处理好权限和文件路径问题。
希望本文能帮助你更好地实现UniApp应用的持久化存储,提升用户体验和数据安全性。如果你有任何疑问或建议,欢迎在评论区留言交流!
相关文章:
【uniapp】在UniApp中实现持久化存储:安卓--生成写入数据为jsontxt
在移动应用开发中,数据存储是一个至关重要的环节。对于使用UniApp开发的Android应用来说,缓存(Cache)是一种常见的数据存储方式,它能够提高应用的性能和用户体验。然而,缓存数据在用户清除缓存或清除应用数…...
DeepSeek-R1本地部署保姆级教程
一、DeepSeek-R1本地部署配置要求 (一)轻量级模型 ▌DeepSeek-R1-1.5B 内存容量:≥8GB 显卡需求:支持CPU推理(无需独立GPU) 适用场景:本地环境验证测试/Ollama集成调试 (二&a…...
Python常见面试题的详解25
1. 什么是 MD5 加密,有什么特点 要点 定义:MD5 是一种广泛应用的哈希函数,它能够把任意长度的输入数据经过特定算法处理,转化为长度固定为 128 位的哈希值,通常以 32 位十六进制字符串的形式呈现,主要用于验…...
DeepSeek赋能大模型内容安全,网易易盾AIGC内容风控解决方案三大升级
在近两年由AI引发的生产力革命的背后,一场关乎数字世界秩序的攻防战正在上演:AI生成的深度伪造视频导致企业品牌声誉损失日均超千万,批量生成的侵权内容使版权纠纷量与日俱增,黑灰产利用AI技术持续发起欺诈攻击。 与此同时&#…...
阿里开源正式开园文生视频、图生视频模型-通义万相 WanX2.1
简介 发布时间与背景 通义万相 Wan2.1 模型于 2025年1月 发布,并迅速登顶视频生成领域权威评测 Vbench 的榜首,超越了包括 Sora、HunyuanVideo、Minimax 等国内外知名模型,并于这周开源。它是阿里云在 AI 视频生成领域的最新成果࿰…...
【Python爬虫(73)】用Python爬虫开启交通数据宝藏,畅行出行未来
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发…...
和鲸科技携手四川气象,以 AI 的力量赋能四川气象一体化平台建设
气象领域与农业、能源、交通、环境科学等国计民生关键领域紧密相连,发挥着不可替代的重要作用。人工智能技术的迅猛发展,为气象领域突破困境带来了新的契机。AI 技术能够深度挖掘气象大数据中蕴含的复杂信息,助力人类更精准地把握自然规律&am…...
spring boot 2.7 + seata +微服务 降级失败问题修复
文章引流 一个简单而使用的API管理工具 版本号 spring boot 2.7.17 spring-cloud-dependencies 2021.0.8 spring-cloud-circuitbreaker-resilience4j 2.1.7 spring-cloud-starter-alibaba-seata 2021.1 jdk 1.8原因分析 未配置属性 feign.circuitbreaker.enabledtrue # 未…...
python-leetcode-最长公共子序列
1143. 最长公共子序列 - 力扣(LeetCode) class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:m, n len(text1), len(text2)dp [[0] * (n 1) for _ in range(m 1)]for i in range(1, m 1):for j in range(1, n …...
centos 7 停更后如何升级kernel版本 —— 筑梦
centos 6/7 内核升级(bios/uefi两种引导方式) —— 筑梦之路_centos7 更新efi-CSDN博客 此处主要说明kernel rpm离线包可以从哪里下载,安装升级参考之前的文章 # 历史kernel版本rpm包http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/…...
WPF-3天快速WPF入门并达到企业级水准
嘿,小伙伴们!如果你已经有一定的C#开发基础,但想快速掌握WPF开发,达到企业级水准,那接下来的这个三天快速入门计划绝对适合你!虽然听起来有点挑战,但别担心,只要跟着这个高强度、结构…...
爬虫反爬:CSS位置偏移反爬案例分析与实战案例
文章目录 1. 反爬机制概述2. 反爬原理3. 案例分析4. 破解思路5. 实战样例样例1:使用Python和Selenium破解CSS位置偏移反爬样例2:电商网站商品列表CSS位置偏移反爬破解 6. 总结 1. 反爬机制概述 CSS位置偏移反爬是一种常见的反爬虫技术,通过C…...
Ubuntu20.04安装Redis
目录 切换到root用户 使用 apt install redis 安装redis 修改配置文件 编辑 重新启动服务器 使用Redis客户端连接服务器 切换到root用户 如果没有切换到root用户的,切换到root用户。 使用 apt install redis 安装redis 遇到y/n直接y即可。 redis安装好之…...
Ubuntu 22.04 安装Nvidia驱动加速deepseek
一键安装22.04 nvidia 驱动 nvidia 官网下载驱动我的环境是NVIDIA RTX A5000nvidia 文档参考没有安装驱动之前确认自己的型号 lspci | grep -i vga (如数字2231) 参考docker 支持nvidia ,注释了需要的取消注释即可 42行-92行一定要重启服务器…...
OkHttp、Retrofit、RxJava:一文讲清楚
一、okHttp的同步和异步请求 Call 是 OkHttp 的核心接口,代表一个已准备好执行的 HTTP 请求。它支持 同步 和 异步 两种模式: enqueue——>okHttp异步 OkHttpClient client new OkHttpClient();Request request new Request.Builder().url("…...
星环科技推出DeepSeek全场景解决方案:即开即用、企业级部署、端侧智能三位一体
星环科技(688031.SH)正式发布DeepSeek全场景解决方案,全面覆盖个人用户、企业客户及行业场景需求,为用户提供从个人到企业、从云端到本地的全方位AI应用支持,为不同需求的用户提供了灵活、高效且安全的AI解决方案。 省…...
Redis缓存一致性难题:如何让数据库和缓存不“打架”?
标题:Redis缓存一致性难题:如何让数据库和缓存不“打架”?(附程序员脱发指南) 导言:当数据库和缓存成了“异地恋” 想象一下:你刚在美团下单了一份麻辣小龙虾,付款后刷新页面&#…...
动态部署Web应用程序与web.xml配置详解
文章目录 前言一、动态部署Web应用程序1.1 什么是动态部署?1.2 动态部署的步骤1.3 动态部署的优势 二、web.xml 配置文件2.1 什么是web.xml?2.2 web.xml 文件的结构2.2.1常见配置(1) 配置上下文参数(2) 配置Servlet(3)配置过滤器(…...
2025年软考报名费用是多少?全国费用汇总!
软考报名时间终于确定了!想要参加2025年软考的同学们注意啦!特别是那些一年只有一次考试机会的科目,千万不要错过哦!这里为大家整理了各地的报名时间、科目、费用等信息,快来看看吧! 一、2025年软考时间安…...
DeepSeek 15天指导手册——从入门到精通 PDF(附下载)
DeepSeek使用教程系列--DeepSeek 15天指导手册——从入门到精通pdf下载: https://pan.baidu.com/s/1PrIo0Xo0h5s6Plcc_smS8w?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/2e8de75027d3 《DeepSeek 15天指导手册——从入门到精通》以系统化学习路径为核心&…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
