Skip to content

本地存储 Storage ​

Storage 在本地存键值,底层是 Android DataStore。页面里带 name 的表单,和任务脚本里的 Storage.get* / Storage.put*,读的是同一份数据。

Storage.create(db) 会切到指定库,返回的实例用 put / get。不 create、直接 Storage.putInteger 走默认库,适合和表单 name 对应。读写类型必须一致,用 getInteger 去读 put 进去的字符串会出问题。

javascript
Storage.putInteger('zan_rate', 66);
let zanRate = Storage.getInteger('zan_rate');
方法作用
create(db)指定存储库,返回实例
put / get通用写入 / 读取
putInteger / getInteger 等按类型读写
remove(key)删一个键
clear()清空当前库
contains(key)是否存在

create(db) ​

参数:

  • db {string} 库名。不同模块用不同名字,避免互相覆盖

返回: {object} 该库的存储实例

javascript
let storage = Storage.create('myDb');
storage.put('user', 'test');

页面表单带 name 时,也可以不 create,直接用默认库:

javascript
let zanRate = Storage.getInteger('zan_rate');
Storage.putInteger('zan_rate', 66);
Storage.remove('zan_rate');
Storage.clear();

put(key, value) ​

参数:

  • key {string} 键
  • value {any} 值

返回: {boolean} 是否写入成功

在 create 得到的实例上调用。

javascript
storage.put('user', 'test');

get(key) ​

参数:

  • key {string} 键

返回: 对应的值;不存在时为 null

javascript
let myUser = storage.get('user');
console.log(myUser);

putInteger / putBoolean / putDouble / putObj / putArray ​

参数:

  • key {string} 键
  • value 与方法对应的类型

返回: {boolean} 是否写入成功

putObj 会把对象或数组序列化为 JSON,支持嵌套结构(不能含 function)。数组也可 Storage.putObj('key', arr),与 putArray 等价;getObj / getArray 读同一键,不存在时前者返回 {}、后者返回 []。

javascript
storage.putInteger('age', 18);
storage.putBoolean('is_success', true);
storage.putDouble('money', 1000000.11);
storage.putObj('obj', {
    name: 'DeekeScript',
    age: 22,
    tags: ['a', 'b'],
    meta: { enabled: true }
});
storage.putArray('arr', [1, 2, 3, 'a', 'c', { name: 'deekeScript' }]);

Storage.putArray('checkbox_name', ['1', '2', '3']);

// 对象数组:putObj 与 putArray 均可
var comments = [
    { id: 'c_1', content: '很棒', enabled: true },
    { id: 'c_2', content: '支持', enabled: true }
];
Storage.putObj('dylc.comments', comments);
var saved = Storage.getObj('dylc.comments');
console.log(saved[0].content); // 很棒

// 嵌套配置对象
Storage.putObj('dylc.config', {
    autoStart: true,
    comments: comments
});
var cfg = Storage.getObj('dylc.config');
console.log(cfg.comments.length);

getInteger / getBoolean / getDouble / getObj / getArray ​

参数:

  • key {string} 键

返回: 与写入时相同类型的值(getObj 可读对象或数组)

和写入用同一套类型,不要混用。

javascript
storage.getInteger('age');
storage.getBoolean('is_success');
storage.getDouble('money');
storage.getObj('obj');
storage.getArray('arr');

remove(key) ​

参数:

  • key {string} 键

返回: {boolean} 是否删除成功

javascript
storage.remove('user');

clear() ​

返回: {boolean} 是否清空成功

清掉当前库里的全部键。

javascript
storage.clear();

contains(key) ​

参数:

  • key {string} 键

返回: {boolean} 存在为 true

javascript
let hasUser = storage.contains('user');

话术列表 ​

内置话术存在 deekeScript:speech:default。type 为 0 是评论,1 是私信;enabled 为 true 表示启用。

javascript
let data = Storage.get('deekeScript:speech:default');
console.log(data);
javascript
let speechData = JSON.parse(Storage.get('deekeScript:speech:default'));
let speechLists = speechData.speechLists;

let enabledComments = speechLists.filter(function (item) {
    return item.type === 0 && item.enabled;
});
let enabledMessages = speechLists.filter(function (item) {
    return item.type === 1 && item.enabled;
});
let randomComment = enabledComments[Math.floor(Math.random() * enabledComments.length)];
console.log(randomComment.content);

相关 ​