需求
1.本地存储数据。
2.在连接上服务器后可以完成移动端和服务端之间的数据同步。
解决方案
- uni-app 框架中使用plus.io.requestFileSystem技术完成数据在手机端的持久化处理。
代码
- plus.io.requestFileSystem代码
let addr = "/storage/emulated/0/database/";export default {storage(className, data) {plus.io.requestFileSystem(plus.io.PRIVATE_DOC, // 程序私有文档目录常量fs => {// 创建或打开文件, fs.root是根目录操作对象,直接fs表示当前操作对象fs.root.getFile(addr + className, {create: true},// 文件不存在则创建fileEntry => {// 文件在手机中的路径fileEntry.createWriter(writer => {// 写入文件成功完成的回调函数writer.onwrite = e => {//console.log('写入成功');};// 向文件中写入数据writer.write(JSON.stringify(data));});},e => {console.log('getFile failed: ', e);});},e => {console.log(e.message);});},read(className) {let that = this;return new Promise((resolve, reject) => {plus.io.requestFileSystem(plus.io.PRIVATE_DOC,fs => {fs.root.getFile(addr + className, {create: false},fileEntry => {fileEntry.file(function(file) {//console.log('文件大小:' + file.size + '-- 文件名:' + file.name);//创建读取文件对象let fileReader = new plus.io.FileReader();//以文本格式读取文件数据内容fileReader.readAsText(file, 'utf-8');//文件读取操作完成时的回调函数fileReader.onloadend = function(evt) {resolve(evt.target.result)};});},e => {reject(e);});},e => {reject(e);console.log(e.message);});})}
}
- end
权限配置
在manifest.json文件中,添加权限。
{...,/* 5+App特有相关 */"app-plus" : {...,"distribute" : {/* android打包配置 */"android" : {"permissions" : [...,"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>","<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",...]},...}},...
}
踩坑记录
- 无法写入,异常提示为:{ “code”: 10, “message”: “执行出错”}
答:可能是因为权限没有开通,需要开通存储空间权限。 - end