Android學習筆記35:使用Shared Preferences方式儲存資料

來源:互聯網
上載者:User

  在Android中一共提供了5種資料存放區方式,分別為:

  (1)Files:通過FileInputStream和FileOutputStream對檔案進行操作。具體使用方法可以參閱博文《Android學習筆記34:使用檔案儲存體資料》。

  (2)Shared Preferences:常用來儲存索引值對形式的資料,對系統配置資訊進行儲存。

  (3)Content Providers:資料共用,用於應用程式之間資料的訪問。

  (4)SQLite:Android內建的輕量級關係型資料庫,支援SQL語言,用來儲存大量的資料,並且能夠對資料進行使用、更新、維護等操作。

  (5)Network:通過網路來儲存和擷取資料。

  本篇博文主要介紹第二種方式,通過Shared Preferences儲存資料。

 

1.使用Shared Preferences儲存資料和讀取資料

  Shared Preferences是Android系統提供的一個輕量級的儲存類,主要用於儲存一些配置資訊,比如視窗狀態(大小、亮度等)。

  Shared Preferences使用索引值對的形式來儲存資料,可以對常用資料類型boolean、float、int、long以及String進行儲存。儲存的資料以xml檔案的形式儲存在/data/data/<包名>/shared_prefs目錄下。

1.1使用Shared Preferences儲存資料

  使用Shared Preferences儲存資料可以通過以下4個步驟來實現:(1)使用Context類提供的getSharedPreferences()方法,擷取SharedPreferences對象。getSharedPreferences()方法的原型如下:

  public abstract SharedPreferences getSharedPreferences(String name, int mode);

  其中,參數name表示儲存資料的檔案名稱。有一點需要注意的是,此處只是定義了該檔案名稱,該檔案實際上並沒有被建立,該檔案只有當建立了SharedPreferences.Edit對象並使用該對象的commit()方法提交資料時,才會被建立。

  參數mode用於指定檔案的操作模式,其可選值有Context.MODE_APPEND(內容追加模式)、Context.MODE_PRIVATE(預設操作模式)、Context.MODE_WORLD_READABLE(可讀模式)、Context.MODE_WORLD_WRITEABLE(可寫入模式)四種,與《Android學習筆記34:使用檔案儲存體資料》中提到的openFileOutput()方法的第二個參數是一樣的。

  (2)使用SharedPreferences對象的edit()方法建立SharedPreferences.Edit對象。使用Shared Preferences方式儲存資料時需要藉助SharedPreferences.Edit類提供的方法來添加資料。SharedPreferences.Edit類提供的方法1所示。

圖1 SharedPreferences.Edit類提供的方法

  可以看出,SharedPreferences.Edit類提供了以索引值對的形式儲存boolean、float、int、long以及String資料類型的資料的方法。

  (3)使用SharedPreferences.EditObject Storage Service資料。

  (4)使用commit()方法提交資料。

  通過以上的4個步驟實現資料存放區的一個簡單樣本如下:

 1     /* 2      * Function  :  儲存資料到SharedPreferences對象中 3      * Param     :  fileName儲存資料的檔案名稱;userName、userPswd儲存的資料 4      * Author    :  部落格園-依舊淡然 5      */ 6     public boolean saveDataToSharedPreferences(String fileName, String userName, int userPswd) { 7         boolean isSaveDataSuccess = false;           //儲存資料成功標誌位 8         SharedPreferences sharedPreferences = mContext.getSharedPreferences(fileName, Context.MODE_PRIVATE); 9         SharedPreferences.Editor edit = sharedPreferences.edit();    //建立SharedPreferences.Editor對象10         edit.putString("userName", userName);        //儲存資料11         edit.putInt("userPswd", userPswd);12         isSaveDataSuccess = edit.commit();           //提交儲存資料13         return isSaveDataSuccess;14     }

  通過以上的代碼,我們建立了一個Context.MODE_PRIVATE(預設操作模式)的資料存放區檔案,該檔案中可以儲存兩項內容:userName和userPswd。

1.2單體測試

  為了驗證以上這段代碼的正確性,我們可以編寫一段單體測試代碼對其進行快速驗證。具體的單體測試代碼如下:

 1     /* 2      * Function  :  單體測試,儲存資料到SharedPreferences對象中 3      * Author    :  部落格園-依舊淡然 4      */ 5     public void saveData() { 6         Context context = getContext(); 7         MySharedPreferences mySharedPreferences = new MySharedPreferences(context); 8         String fileName = "userInfo";        //檔案名稱 9         String userName = "jack";            //儲存的資料10         int userPswd = 123;                  //儲存的資料11         boolean flag = mySharedPreferences.saveDataToSharedPreferences(fileName, userName, userPswd);12         Log.i(TAG, "-->>" + flag);13     }

  運行該單體測試,我們可以看到Log日誌中,flag列印結果為true,表明資料存放區成功。並且我們建立了一個名為“userInfo”的隱藏檔,並在其中儲存了兩條資料內容:userName = "jack"和userPswd = 123。

  那麼,“userInfo”檔案究竟被存放到了什麼地方呢?答案是/data/data/<包名>/shared_prefs目錄下,2所示。

圖2 Shared Preferences方式儲存資料的檔案目錄

  有一點需要注意,以Shared Preferences方式儲存資料時,檔案會預設的以xml的格式進行儲存。

  開啟“userInfo.xml”檔案,可以看到其中內容3所示。

圖3 “userInfo.xml”檔案內容

  可見,通過以上的代碼確實可以實現資料的正確儲存。

1.3使用Shared Preferences讀取資料

  那麼,又該如何在程式中讀取儲存在“userInfo.xml”檔案中的內容呢?下面的代碼給出了一種實現的方案。

 1     /* 2      * Function  :  從SharedPreferences對象中讀取資料 3      * Param     :  fileName儲存資料的檔案名稱 4      * Author    :  部落格園-依舊淡然  5      */ 6     public Map<String, Object> readDataFromSharedPreferences(String fileName) { 7         Map<String, Object> map = new HashMap<String, Object>();            //Map對象,用於儲存讀取到的資料 8         SharedPreferences sharedPreferences = mContext.getSharedPreferences(fileName, Context.MODE_PRIVATE); 9         String userName = sharedPreferences.getString("userName", "");      //讀取SharedPreferences對象中的資料10         int userPswd = sharedPreferences.getInt("userPswd", 0);11         map.put("userName", userName);        //將讀取到的資料存入Map對象12         map.put("userPswd", userPswd);13         return map;14     }

  通過以上的代碼,實現了從Shared Preferences對象中讀取資料,並將讀取到的資料儲存到了Map對象中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.