バックグラウンド
深夜の独白から:
数十または数百のキー値を定義するのが一般的ですが、もっと簡単な方法はありますか?
これは、プロジェクト内で制御されていない数少ない場所の1つであり、指数関数的に拡大し、一貫性の隠れた危険を簡単に埋めることができます。
新しい値が追加されるたびに、key、get、put、init、5つの場所を考慮する必要があります...
public class Configs {
...
private static int TEST_ID;
public final static String KEY_TEST_ID = "KEY_TEST_ID";
public static void setTestId(int id) {
TEST_ID = id;
SPUtils.getInstance().put(KEY_TEST_ID, id);
}
public static int getTestId() {
if (IS_XXXX()) return TEST_ID;
return UUID.ramdom().toString();
}
public static void initConfigs() {
TEST_ID = SPUtils.getInstance().getInt(KEY_TEST_ID, 0);
}
}
その後、次々と改善の提案を受け、「属性エージェント」と言って、DylanCaiオープンソースライブラリMMKV-KTXを勧めてくれた友達もいました。
同時に、「属性プロキシ」に触発されて、キー、値、取得、配置、および初期化をJavaの単一の設計に減らす設計を思いつきました。
implementation 'com.kunminx.arch:key-value:1.2.0-beta'
3ステップの曲を使用します。
1. POJOを読み書きする場合は、Serializableインターフェイスを実装する必要があります
public class User implements Serializable {
public String title;
public String content;
}
2.いつものように、Configsのようなプロジェクト構成管理クラスを作成します
//Configs 中不再定义一堆 KEY、VALUE 常量和 get、put、init 静态方法,
//只需一条条 KeyValue 静态变量:
public class Configs {
public final static KeyValueString accountId = new KeyValueString("accountId");
public final static KeyValueSerializable<User> user = new KeyValueSerializable<>("user");
}
3.ページのget()set()メソッドなどを使用してKeyValueを読み書きします。
public class MainActivity extends AppCompatActivity {
...
//测试持久化写入
Configs.user.set(u);
//测试读取
Log.d("---title", Configs.user.get().title);
Log.d("---content", Configs.user.get().content);
}
KeyValueXは、デフォルトでSharedPreferenceを使用して読み取りと書き込みを行い、KeyValueToolに従ってMMKVおよびその他の実装を挿入することもできます(詳細については、MainActivityの例を参照してください)。
現在、ライブラリはオープンソースであり、フィードバックを歓迎します。