簡介Android應用中sharedPreferences類存儲數(shù)據(jù)的用法
在Android開發(fā)中,經(jīng)常會遇到這樣一種情況,即需要將用戶偏好設置(如用戶偏好的app色彩主題)、與特定登錄用戶相關的設置(如不同登陸用戶的偏好)、整個app的生命周期內(nèi)的設置(如首次登陸顯示介紹頁)存儲在用戶本地,那么首先考慮使用sharedPreferences。這是Android中專門用來存儲輕量級鍵值對數(shù)據(jù)的類,會在本地以xml文件形式存儲。
一、 運行機制
接口:SharedPreferencesImpl在該接口中,定義了一個Editor接口、一個edit方法、多個get方法、一個監(jiān)聽器用于監(jiān)聽內(nèi)容變更。其中,Editor接口主要用來寫入數(shù)據(jù),edit方法用來對外提供一個editor實例,get方法用來獲取鍵值對,監(jiān)聽器用于實現(xiàn)類中監(jiān)聽。
接口:Editor接口中含有多個put方法、一個commit方法等。之所以要獨立出一個接口來進行寫操作,是為了保證數(shù)據(jù)寫入的完整性。主要考慮的場景是如果同時要寫入多條鍵值對,這些鍵值對不會逐條寫入文件中,而是先打包在一起,再一次性寫入,即one-at-a-time。具體實現(xiàn)方法是在Editor實現(xiàn)一個hashMap來暫存要寫入的數(shù)據(jù),先把所有鍵值對寫入內(nèi)存中的該hashMap中,然后再一次性寫入文件中。
該過程可以概括為先commitToMemory, 再writeToFile。
二、 使用方法
首先,想寫入鍵值對,要先獲取一個sharedPreferences對象。
此時需要提供兩個要素:context上下文對象,對應的文件名字。
這里,我們要明確這些鍵值對的實際存儲方式:它們是以多個文件的形式存儲: /data/data/{packageName}/shared_prefs/{name}.xml。其中,實際的{name}.xml是在程序中指定的。
那么,我們只要調(diào)用context.getSharedPreferences(name, mode)即可獲取到所在packageName文件夾里對應的name.xml文件映射過來的SharedPreferences對象。其中,mode是讀取文件的方式。
示例:
1、使用SharedPreferences保存數(shù)據(jù)方法如下:
//實例化SharedPreferences對象(第一步)
SharedPreferences mySharedPreferences= getSharedPreferences("test",
Activity.MODE_PRIVATE);
//實例化SharedPreferences.Editor對象(第二步)
SharedPreferences.Editor editor = mySharedPreferences.edit();
//用putString的方法保存數(shù)據(jù)
editor.putString("name", "Karl");
editor.putString("habit", "sleep");
//提交當前數(shù)據(jù)
editor.commit();
//使用toast信息提示框提示成功寫入數(shù)據(jù)
Toast.makeText(this, "數(shù)據(jù)成功寫入SharedPreferences!" , Toast.LENGTH_LONG).show();
執(zhí)行以上代碼,SharedPreferences將會把這些數(shù)據(jù)保存在test.xml文件中,可以在File Explorer的data/data/相應的包名/test.xml 下導出該文件,并查看。
2、使用SharedPreferences讀取數(shù)據(jù)方法如下:
//同樣,在讀取SharedPreferences數(shù)據(jù)前要實例化出一個SharedPreferences對象
SharedPreferencessharedPreferences= getSharedPreferences("test",
Activity.MODE_PRIVATE);
// 使用getString方法獲得value,注意第2個參數(shù)是value的默認值
String name =sharedPreferences.getString("name", "");
String habit =sharedPreferences.getString("habit", "");
//使用toast信息提示框顯示信息
Toast.makeText(this, "讀取數(shù)據(jù)如下:"+"\n"+"name:" + name + "\n" + "habit:" + habit,
Toast.LENGTH_LONG).show();
三、理解
我們可以簡單的理解為:在手機本地某個地方會存放我們自定義的xml文件,每個文件用來存放相關的鍵值對數(shù)據(jù)。比如我們希望存儲用戶的偏好設置,即可創(chuàng)建一個名為UserPref的SharedPreferences并讀寫即可。
四、比較getSharedPreferenced和getPreference
getSharedPreferenced獲取的文件是在package內(nèi)都可以使用context對象獲取到的,只需要指定name就可以獲取到特定的xml文件。
但是,getPreference方法是專門用在Activity內(nèi)部的,創(chuàng)建的xml文件只能在該Activity上下文內(nèi)獲取,而且不需要指定名字,這個xml文件只屬于這個Activity。
其它就沒有區(qū)別了。唯一區(qū)別就是一個權限域的區(qū)別。
示例:
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences("userPref", MODE_PRIVATE);
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
- android開發(fā)教程之實現(xiàn)toast工具類
- Android應用中使用SharedPreferences類存儲數(shù)據(jù)的方法
- Android通過記住密碼功能學習數(shù)據(jù)存儲類SharedPreferences詳解及實例
- android實用工具類分享(獲取內(nèi)存/檢查網(wǎng)絡/屏幕高度/手機分辨率)
- Android屏幕分辨率工具類使用詳解
- 封裝的android監(jiān)聽手指左右滑動屏幕的事件類分享
- Android開發(fā)實現(xiàn)的IntentUtil跳轉多功能工具類【包含視頻、音頻、圖片、攝像頭等操作功能】
- Android開發(fā)之多媒體文件獲取工具類實例【音頻,視頻,圖片等】
- android 一些工具類匯總
- Android開發(fā)中4個常用的工具類【Toast、SharedPreferences、網(wǎng)絡及屏幕操作】
相關文章
Android開發(fā)教程之獲取系統(tǒng)輸入法高度的正確姿勢
這篇文章主要給大家介紹了關于Android開發(fā)教程之獲取系統(tǒng)輸入法高度的正確姿勢,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Android具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-10-10
Android開發(fā) -- 狀態(tài)欄通知Notification、NotificationManager詳解
本文主要講解狀態(tài)欄通知Notification、NotificationManager,小編覺得非常詳細,給大家一個參考,希望對大家學習有所幫助。2016-06-06
Android使用Item Swipemenulistview實現(xiàn)仿QQ側滑刪除功能
大家都用過QQ,肯定有人好奇QQ滑動刪除Item的效果是怎樣實現(xiàn)的,其實我們使用Swipemenulistview就可以簡單的實現(xiàn)。這篇文章主要介紹了Android使用ItemSwipemenulistview實現(xiàn)仿QQ側滑刪除功能,需要的朋友可以參考下2017-02-02
Android編程實現(xiàn)圖片放大縮小功能ZoomControls控件用法實例
這篇文章主要介紹了Android編程實現(xiàn)圖片放大縮小功能ZoomControls控件用法,結合具體實例形式分析了Android ZoomControls控件實現(xiàn)圖片縮放的具體操作方法與相關注意事項,需要的朋友可以參考下2017-09-09

