本地存储 - Storages

# Storages storages模块提供了保存简单数据、用户配置等的支持。 保存的数据除非应用被卸载或者被主动删除,否则会一直保留。 storages支持number, boolean, string等数据类型以及把Object, Array用JSON.stringify序列化存取。 storages保存的数据在脚本之间是共享的,任何脚本只要知道storage名称便可以获取到相应的数据,因此它不能用于敏感数据的储存。 storages无法像Web开发中LocalStorage一样提供根据域名独立的存储,因为脚本的路径随时可能改变。 ## storages.create(name) - name {string} 本地存储名称 **创建一个本地存储**并返回一个Storage对象。不同名称的本地存储的数据是隔开的,而相同名称的本地存储的数据是共享的。 例如在一个脚本中,创建名称为ABC的存储并存入a=123: ```js var storage = storages.create("login"); storage.put("qq", 283054503); ``` 而在另一个脚本中是可以获取到ABC以及a的值的: ```js var storage = storages.create("login"); log("qq = " + storage.get("qq")); ``` 因此,本地存储的名称比较重要,尽量使用含有域名、作者邮箱等唯一信息的名称来避免冲突,例如: ```js var storage = storages.create("283054503@qq.com:qq"); ``` ## storages.remove(name) - name {string} 本地存储名称 **删除一个本地存储以及他的全部数据**。如果该存储不存在,返回false;否则返回true。 # Storage ## Storage.get(key[, defaultValue]) - key {string} 键值 - defaultValue {any} 可选,默认值 **从本地存储中取出键值为key的数据**并返回。 如果该存储中不包含该数据,这时若指定了默认值参数则返回默认值,否则返回undefined。 返回的数据可能是任意数据类型,这取决于使用Storage.put保存该键值的数据时的数据类型。 ## Storage.put(key, value) - key {string} 键值 - value {any} 值 **把值value保存到本地存储中**。value可以是undefined以外的任意数据类型。如果value为undefined则抛出TypeError。 存储的过程实际上是使用JSON.stringify把value转换为字符串再保存,因此value必须是可JSON化的才能被接受。 ## Storage.remove(key) - key {string} 键值 **移除键值为key的数据**。不返回任何值。 ## Storage.contains(key) - key {string} 键值 **返回该本地存储是否包含键值为key的数据**。是则返回true,否则返回false。 ## Storage.clear() **移除该本地存储的所有数据**。不返回任何值。 # 示例 ## 接口函数封装与调用 ```js //此代码由飞云脚本圈原创(www.feiyunjs.com) //保存本地数据 function setStorageData(name, key, value) { const storage = storages.create(name); //创建storage对象 storage.put(key, value); }; //读取本地数据 function getStorageData(name, key) { const storage = storages.create(name); //创建storage对象 if (storage.contains(key)) { return storage.get(key, ""); }; //默认返回undefined }; //删除本地数据 function delStorageData(name, key) { const storage = storages.create(name); //创建storage对象 if (storage.contains(key)) { storage.remove(key); }; }; ``` ## 保存数组和复杂对象 ```js var storage = storages.create("Auto.js例子:复杂数据"); var arr = [1, 4, 2, 5]; var obj = { name: "Auto.js", url: "www.autojs.org" }; //保存 storage.put("arr", arr); storage.put("obj", obj); console.show(); //取出 log("arr = ", storage.get("arr")); log("obj = ", storage.get("obj")); ``` ## 保存整数等简单数据 ```js var storage = storages.create("Auto.js例子:简单数据"); var a = 1234; var b = true; var str = "hello"; //保存 storage.put("a", a); storage.put("b", b); storage.put("str", str); console.show(); //取出 log("a = " + storage.get("a")); log("b = " + storage.get("b")); log("str = " + storage.get("str")); ``` ## 随手记 ```js "ui"; ui.layout( <vertical padding="16"> <horizontal> <text textColor="black" textSize="18sp" layout_weight="1">随手记</text> <button id="save" text="保存" w="auto" style="Widget.AppCompat.Button.Borderless.Colored"/> </horizontal> <input id="content" h="*" gravity="top"/> </vertical> ); var storage = storages.create("Auto.js例子:随手记"); var content = storage.get("content"); if(content != null){ ui.content.setText(content); } ui.save.click(()=>{ storage.put("content", ui.content.text()); }); ```