W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
輕量級偏好數(shù)據(jù)庫是輕量級存儲,主要用于保存應(yīng)用的一些常用配置,并不適合存儲大量數(shù)據(jù)和頻繁改變數(shù)據(jù)的場景。用戶的數(shù)據(jù)保存在文件中,可以持久化的存儲在設(shè)備上。需要注意的是用戶訪問的實(shí)例包含文件所有數(shù)據(jù),并一直加載在設(shè)備的內(nèi)存中,并通過輕量級偏好數(shù)據(jù)庫的 API 完成數(shù)據(jù)操作。
輕量級偏好數(shù)據(jù)庫向本地應(yīng)用提供了操作偏好型數(shù)據(jù)庫的 API,支持本地應(yīng)用讀寫少量數(shù)據(jù)及觀察數(shù)據(jù)變化。數(shù)據(jù)存儲形式為鍵值對,鍵的類型為字符串型,值的存儲數(shù)據(jù)類型包括整型、字符串型、布爾型、浮點(diǎn)型、長整型、字符串型 Set 集合。
創(chuàng)建數(shù)據(jù)庫
通過數(shù)據(jù)庫操作的輔助類可以獲取到要操作的 Preferences 實(shí)例,用于進(jìn)行數(shù)據(jù)庫的操作。
類名 | 接口名 | 描述 |
---|---|---|
DatabaseHelper | Preferences getPreferences(String name) | 獲取文件對應(yīng)的 Preferences 單實(shí)例,用于數(shù)據(jù)操作。 |
查詢數(shù)據(jù)
通過調(diào)用 Get 系列的方法,可以查詢不同類型的數(shù)據(jù)。
類名 | 接口名 | 描述 |
---|---|---|
Preferences | int getInt(String key, int defValue) | 獲取鍵對應(yīng)的 int 類型的值。 |
Preferences | float getFloat(String key, float defValue) | 獲取鍵對應(yīng)的 float 類型的值。 |
插入數(shù)據(jù)
通過 Put 系列的方法可以修改 Preferences 實(shí)例中的數(shù)據(jù),通過 flush 或者 flushSyn c將 Preferences 實(shí)例持久化。
類名 | 接口名 | 描述 |
---|---|---|
Preferences | Preferences putInt(String key, int value) | 設(shè)置 Preferences 實(shí)例中鍵對應(yīng)的 int 類型的值。 |
Preferences | Preferences putString(String key, String value) | 設(shè)置 Preferences 實(shí)例中鍵對應(yīng)的 String 類型的值。 |
Preferences | void flush() | 將 Preferences 實(shí)例異步寫入文件。 |
Preferences | boolean flushSync() | 將 Preferences 實(shí)例同步寫入文件。 |
觀察數(shù)據(jù)變化
輕量級偏好數(shù)據(jù)庫還提供了一系列的接口變化回調(diào),用于觀察數(shù)據(jù)的變化。開發(fā)者可以通過重寫 onChange 方法來定義觀察者的行為。
類名 | 接口名 | 描述 |
---|---|---|
Preferences | void registerObserver(PreferencesObserver preferencesObserver) | 注冊觀察者,用于觀察數(shù)據(jù)變化。 |
Preferences | void unRegisterObserver(PreferencesObserver preferencesObserver) | 注銷觀察者。 |
Preferences.PreferencesObserver | void onChange(Preferences preferences, String key) | 觀察者的回調(diào)方法,任意數(shù)據(jù)變化都會回調(diào)該方法。 |
刪除數(shù)據(jù)文件
通過調(diào)用以下兩種接口,可以刪除數(shù)據(jù)文件。
類名 | 接口名 | 描述 |
---|---|---|
DatabaseHelper | boolean deletePreferences(String name) | 刪除文件和文件對應(yīng)的Preferences單實(shí)例。 |
DatabaseHelper | void removePreferencesFromCache(String name) | 刪除文件對應(yīng)的Preferences單實(shí)例。 |
移動(dòng)數(shù)據(jù)庫文件
類名 | 接口名 | 描述 |
---|---|---|
DatabaseHelper | boolean movePreferences(Context sourceContext, String sourceName, String targetName) | 移動(dòng)數(shù)據(jù)庫文件。 |
讀取指定文件,將數(shù)據(jù)加載到 Preferences 實(shí)例,用于數(shù)據(jù)操作。
DatabaseHelper databaseHelper = new DatabaseHelper(context);// context入?yún)㈩愋蜑閛hos.app.Context
String fileName = "name";
Preferences preferences = databaseHelper.getPreferences(fileName);
首先獲取指定文件對應(yīng)的 Preferences 實(shí)例,然后借助 Preferences API 讀取數(shù)據(jù)。
java 接口 讀取整型數(shù)據(jù)
int value = preferences.getInt("intKey", 0);
首先獲取指定文件對應(yīng)的 Preferences 實(shí)例,然后借助 Preferences API 將數(shù)據(jù)寫入 Preferences 實(shí)例,通過 flush 或者 flushSync 將 Preferences 實(shí)例持久化。
異步:
preferences.putInt("intKey", 3);
preferences.putString("StringKey", "String value");
preferences.flush();
同步:
preferences.putInt("intKey", 3);
preferences.putString("StringKey", "String value");
preferences.flushSync();
開發(fā)者可以向 Preferences 實(shí)例注冊觀察者,觀察者對象需實(shí)現(xiàn)Preferences.PreferencesObserver 接口。flushSync() 或 flush() 執(zhí)行后,該 Preferences 實(shí)例注冊的所有觀察者的 onChange() 方法都會被回調(diào)。不再需要觀察者時(shí)請注銷。
private class PreferencesChangeCounter implements Preferences.PreferencesObserver {
final AtomicInteger notifyTimes = new AtomicInteger(0);
@Override
public void onChange(Preferences preferences, String key) {
if ("intKey".equals(key)) {
notifyTimes.incrementAndGet();
}
}
}
// 向preferences實(shí)例注冊觀察者
PreferencesChangeCounter counter = new PreferencesChangeCounter();
preferences.registerObserver(counter);
// 修改數(shù)據(jù)preferences.putInt("intKey", 3);
boolean result = preferences.flushSync();
// 修改數(shù)據(jù)后,onChange方法會被回調(diào),notifyTimes == 1
int notifyTimes = counter.notifyTimes.intValue();
// 向preferences實(shí)例注銷觀察者
preferences.unRegisterObserver(counter);
從內(nèi)存中移除指定文件對應(yīng)的 Preferences 單實(shí)例。移除 Preferences 單實(shí)例時(shí),應(yīng)用不允許再使用該實(shí)例進(jìn)行數(shù)據(jù)操作,否則會出現(xiàn)數(shù)據(jù)一致性問題。
DatabaseHelper databaseHelper = new DatabaseHelper(context);
// 指定文件名稱
String fileName = "name";
databaseHelper.removePreferencesFromCache(fileName);
從內(nèi)存中移除指定文件對應(yīng)的 Preferences 單實(shí)例,并刪除指定文件及其備份文件、損壞文件。刪除指定文件時(shí),應(yīng)用不允許再使用該實(shí)例進(jìn)行數(shù)據(jù)操作,否則會出現(xiàn)數(shù)據(jù)一致性問題
DatabaseHelper databaseHelper = new DatabaseHelper(context);
// 指定文件名稱
String fileName = "name";
boolean result = databaseHelper.deletePreferences(fileName);
從源路徑移動(dòng)文件到目標(biāo)路徑。移動(dòng)文件時(shí),應(yīng)用不允許再操作該文件數(shù)據(jù),否則會出現(xiàn)數(shù)據(jù)一致性問題。
Context targetContext = XXX;
DatabaseHelper databaseHelper = new DatabaseHelper(targetContext);
// 指定文件名稱
String srcFile = "srcFile";
String targetFile = "targetFile";
Context srcContext = XXX;
boolean result = databaseHelper.movePreferences(srcContext,srcFile,targetFile);
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: