Android SharedPreferences的使用

SharedPreferences是Android中存儲數(shù)據(jù)的一種方式,它簡單快捷,通常用于紀(jì)錄一些配置設(shè)置信息,用起來非常爽。但也有不爽的地方就是要記錄的東西多了就很亂。最近在整理項目代碼的時候就發(fā)現(xiàn)了這個問題。先不扯淡,先溫習(xí)總結(jié)一下SP的用法。

Android中得到SharedPrefernces方法的方法有三種。分別是:ContextgetSharedPreferences(String name, int mode)ActivitygetPreferences(int mode)PreferenceManager.getDefaultSharedPreferences(Context context);文章先介紹SharedPreferences的基本用法,然后在介紹三種方法的區(qū)別。

SharedPreferences的基本用法

先通過Context.getSharedPreferences(String name, int mode)方法來得到的SharedPreferences為例介紹。為什么用這個方法,因為我比較喜歡這個方法,它可以讓我們自己指定SP的名字。用這個方法生成的SP有一種親兒子的感覺。

上關(guān)鍵代碼:

SharedPreferences diySP = getSharedPreferences("diy",MODE_PRIVATE) ;
diySP.edit()
        .putString("name",editTextName.getText().toString())
        .putString("age", editTextAge.getText().toString())
        .apply();

editTextNameeditTextAge是兩個EditText。當(dāng)我在里面分別輸入Tony,32之后執(zhí)行上面代碼。
我們通過DDMS查看在我們項目的目錄下shared_prefs目錄下增加了一個diy.xml,diy是我上面起的名字。把它拷貝到電腦,其中內(nèi)容如下,當(dāng)然很多時候age是int值,那就進行一下類型轉(zhuǎn)化,使用putInt方法就可以了:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="name">Tony</string>
    <string name="age">32</string>
</map>

通過生成的文件可以看出,SharedPreferences實際的結(jié)構(gòu)是一個map,通過key-value的方式存儲的。理解這一點就很簡單了。

從SharedPreferences中取值的方法就是:

String name = diySP.getString("name","") ;
String age = diySP.getString("age","0") ;

這樣我們就可以存儲一些簡單的配置信息,在應(yīng)用下次啟動的時候繼續(xù)使用這些配置。

如果必要的時候需要清除這些信息可以使用:

diySP.edit().clear().apply();

所配置的信息就會被清除。

如果有必要的話,需要監(jiān)聽一個配置信息是不是有改變,就可以使用OnSharedPreferenceChangeListener接口,然后使用SP的registerOnSharedPreferenceChangeListener方法注冊一個變化監(jiān)聽器。

但是這個并不是很常用。代碼也十分簡單,我就不演示了。

三種方法得到SharedPreferences的區(qū)別

Context的方法

ContextgetSharedPreferences(String name, int mode)上面的介紹過了,名字是我們指定的。

Activity的方法

而通過ActivitygetPreferences(int mode)方法創(chuàng)建得到的SharePreferences的文件名稱是:{Activity's local name}.xml,這是我從DDMS看的,有興趣的人也可以自己去看看。{Activity's local name}是Activity的本地名字,即包涵本地包名的名字。例如我的PSActivity的完整包名:demo.me.mydemoapplication.sp.PSActivity,我的項目包名為:demo.me.mydemoapplication,那么Activity的本地名稱為:sp.PSActivity,而生成的SP的xml文件名為:sp.SPActivity.xml。另一種方法進入ActivitygetPreferences(int mode)的源碼:

public SharedPreferences getPreferences(int mode) {
    return getSharedPreferences(getLocalClassName(), mode);
}

它最終調(diào)用的Context的getSharedPreferences方法傳入的名稱為這個類的本地名稱。

PreferenceManager的方法

PreferenceManager.getDefaultSharedPreferences(Context context)方法得到的SP的文件名稱為:{app_package}_preferences.xml;這個是以應(yīng)用包名命名的SP。源碼感興趣的可以自己去看。最終還是使用的Context的方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,362評論 0 17
  • 面試題總結(jié) 通用 安卓學(xué)習(xí)途徑, 尋找資料學(xué)習(xí)的博客網(wǎng)站 AndroidStudio使用, 插件使用 安卓和蘋果的...
    JingBeibei閱讀 1,873評論 2 21
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,191評論 25 708
  • 一、繼承結(jié)構(gòu) java.lang.object-->android.content.Context-->and...
    supory閱讀 1,546評論 1 3
  • 海龍2 視頻鏈接 結(jié)論 龍本受物防影響,沒有觀測到有技能受魔防減傷
    Sayalic_2484閱讀 367評論 0 1

友情鏈接更多精彩內(nèi)容