在快应用开发中遇到需要保存数据到本地的需求。在查看快应用开发文档时,发现存储方式只有数据存储和文件存储,而数据存储只有system.storage 方法,且存储的数据类型只有String类型。不像android原生开发中,除了文件存储,还有SharedPreferences简单数据存储,和sqlite 数据库的存储方式。
而我本次开发中需要存储像数据库那样的数据,数据量不大,用不找文件存储,但也不小,不是简短一个字符串能够搞定。
查看system.storage的介绍文档,发现其对存储值 String的lenth并没有限制,那是否可以把js数据转换成String存储呢?于是尝试用storage来完成数组的存储,实验结果是可行的。下面示例代码中的数组中每一元素包含一个id和一个链接url。
使用storage前一定要导入对应的接口模块
import storage from '@system.storage'
本页面参数定义
private: {
gameId:"",
shoucangList:[],
},
var item = {};
item["id"]= this.gameId;
item["url"] = this.imgurl;
try {
this.shoucangList.push(item);
storage.set({key: 'shoucang', value: JSON.stringify(this.shoucangList)});
console.log("savedata success: " + JSON.stringify(this.shoucangList));
} catch(e) {
console.log("savedata failed with exception:" + e.message + '发生在' + e.lineNumber + '行');
}
for (var item in this.shoucangList) {
if (this.shoucangList[item].id === this.gameId) {
this.shoucangList.splice(item, 1);
storage.set({key: 'shoucang',value: JSON.stringify(this.shoucangList)});
console.log("cancelShouCang success: " + JSON.stringify(this.shoucangList));
}
}
const that = this;
storage.get({key:"shoucang",
success: function (data) {
console.log('storage get data success:' + data);
if (!(typeof data === "undefined" || data === null || data === "")) {
that.shoucangList = JSON.parse(data);
} else {
that.shoucangList = [];
}
},
fail: function (data, code) {
console.log(`storage get data fail, code = ${code}`),
that.shoucangList = [];
}
});