鴻蒙OS 輕量級偏好數(shù)據(jù)庫開發(fā)指導(dǎo)

2020-09-18 16:28 更新

場景介紹

輕量級偏好數(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ù)庫文件。

開發(fā)步驟

  1. 準(zhǔn)備工作,導(dǎo)入對輕量級偏好數(shù)據(jù)庫 SDK 到開發(fā)環(huán)境。

  1. 獲取 Preferences 實(shí)例。

讀取指定文件,將數(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);

  1. 從指定文件讀取數(shù)據(jù)。

首先獲取指定文件對應(yīng)的 Preferences 實(shí)例,然后借助 Preferences API 讀取數(shù)據(jù)。

java 接口 讀取整型數(shù)據(jù)

   int value = preferences.getInt("intKey", 0);

  1. 將數(shù)據(jù)寫入指定文件。

首先獲取指定文件對應(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();

  1. 注冊觀察者。

開發(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);

  1. 移除 Preferences 實(shí)例。

從內(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);

  1. 刪除指定文件。

從內(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);

  1. 移動(dòng)指定文件。

從源路徑移動(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);
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號