本地存储 - 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());
});
```