日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android持久化存储(2)SharedPreferences使用介绍

發(fā)布時間:2024/9/21 Android 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android持久化存储(2)SharedPreferences使用介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.背景

在用文件存儲的時候,我們體驗到使用內(nèi)部存儲的方便快捷,即既不用申請權(quán)限,也不用指定路徑,不過還是有不方便的地方,特別是在存儲程序配置信息時,程序的配置信息往往是”鍵-值“的形式,例如

是否夜間模式-否
語言-中文
全屏瀏覽-否

對這些信息的存取,我們需要另外寫解析類工具,不過,已有現(xiàn)成的輪子可以使用,那就是Android提供的SharedPreferences類。

2.什么是SharedPreferences

SharedPreferences由share和preferences組成,share是共享,preferences意為偏好,可理解成偏好設(shè)置,例如Android Studio菜單里有Preference,點進去是各種設(shè)置,從SharedPreferencess名稱可以看出,這個類和設(shè)置有關(guān)系,那么又是誰的設(shè)置,自然是應(yīng)用程序的設(shè)置,而為什么share?個人認為是因為SharedPreferences是單例對象,可在整個應(yīng)用內(nèi)數(shù)據(jù)共享訪問。

Sharepreferences實際上是一個輕量級的存儲類,這個類的功能是以“鍵-值”對的方式保存數(shù)據(jù)的xml文件,不過只支持一些Java基本數(shù)據(jù)類型,包括int、boolean、float、long、String、StringSet,支持的數(shù)據(jù)類型對存儲程序配置文件基本夠用,如果想保存更復(fù)雜的數(shù)據(jù)類型,還得使用上個博客提到的文件存儲。xml文件保存路徑在/data/data/shared_prefs目錄下,這個存儲目錄Sharepreferences自動創(chuàng)建,實際在使用的時候,我們根本不需要關(guān)心這個目錄。

3.SharedPreferences用法

3.1 獲取SharedPreferences對象

Android中提供了兩種方法用于得到 SharedPreferences對象。

  • Context類中的getSharedPreferences(String name,int mode)方法,第一個參數(shù)用于指定SharedPreferences文件的名稱,如果指定的文件不存在則會創(chuàng)建一個,第二個參數(shù)用于指定操作模式,主要有以下兩種模式可以選擇:
    • Context.MODE_PRIVATE(默認):只有當(dāng)前的應(yīng)用程序才能對文件進行讀寫,該模式下,寫入內(nèi)容覆蓋原文件內(nèi)容;
    • Context.MODE_APPEND:該模式會檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文件;

    其實還有另外兩種操作模式,分別是Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE,用來控制其他應(yīng)用是否有權(quán)限讀寫該文件,出于安全上的原因,在Android 4.2以后已經(jīng)被廢棄。

    context.getSharedPreferences("Storage",MODE_PRIVATE)
  • Activity類中的getPreferences(int mode)方法,這個方法只需設(shè)置模式,文件名默認使用類名。我們注意到這個方法名沒有Shared字眼,因為通過這個方法獲得的SharedPreferences對象只能在該Activity中使用,沒有共享屬性了.
  • 其實還有一個方法獲取SharedPreferences,那就是使用PreferenceManager類中的getDefaultSharedPreferences(Context context)方法,該接收一個 Context 參數(shù),該方法自動使用當(dāng)前應(yīng)用程序的包名作為前綴來命名SharedPreferences文件。但PreferenceManager類在最近的Android 10被廢棄,Android 10是去年(2019)公布,這意味著使用Android 10的設(shè)備占比不算太大,還有大量的舊版本仍支持PreferenceManager,是否考慮使用由讀者自己斟酌,就個人而言,前兩個方法已經(jīng)夠用了,考慮到以后的兼容性,建議不使PreferenceManager類來獲取SharedPreferences對象。

    3.2 使用SharedPreferences存取數(shù)據(jù)

  • 存儲數(shù)據(jù)
    獲取SharedPreferences只是第一步,還不能直接存取數(shù)據(jù),還需要調(diào)用SharedPreferences的編輯器Editor,獲取方法是調(diào)用SharedPreferences對象的edit()方法,代碼如下
  • SharedPreferences.Editor editor = sharedPreferences.edit();

    有了Editor之后,便可以調(diào)用方法存數(shù)據(jù),想要存儲什么數(shù)據(jù)類型,put對應(yīng)數(shù)據(jù)類型即可,最后記得使用commit()或者apply()(關(guān)于commit()和supply()方法的差異在下文提及)方法提交,示例代碼如下

    //存String數(shù)據(jù)類型editor.putString("name","Li Lei");//存Int數(shù)據(jù)類型editor.putInt("age", 33);//存Boolean數(shù)據(jù)類型editor.putBoolean("rich",false);//存float數(shù)據(jù)類型editor.putFloat("deposit",123.12f);//最后提交editor.commit();

    提交之后,我們可以在data/data/package/shared_prefs目錄下找到對應(yīng)的xml文件,xml文件里的內(nèi)容是剛才提交的數(shù)據(jù)。

    <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map><string name="name">Li Lei</string><boolean name="rich" value="false" /><float name="deposit" value="123.12" /><int name="age" value="33" /> </map>
  • 讀取數(shù)據(jù)
    讀取數(shù)據(jù)不需要使用編輯器Editor,直接使用SharedPreferences對象即可,例如要獲取剛剛存的存款deposit,因為是float數(shù)據(jù)類型,使用getFloat(String key, float defValue)方法,這個方法要傳入兩個參數(shù),第一個對應(yīng)的鍵的名稱,第二個是如果沒有值,則返回的默認值。其他數(shù)據(jù)類型類似 sharedPreferences.getFloat("deposit",0.0f);sharedPreferences.getString("deposit","NOBODY");sharedPreferences.getBoolean("rich",false);
  • 刪除指定數(shù)據(jù)和清空數(shù)據(jù)
    這又用回編輯器Editor,刪除是使用Editor的remove(String key)函數(shù),輸入?yún)?shù)是鍵的名稱,清空數(shù)據(jù)使用clear()函數(shù),最后要使用commit()提交,也就是說,使用Editor做的任何操作,最后都要使用commit()或apply()方法提交才有效果。 editor.remove("name");editor.commit();editor.clear();editor.commit();
  • commit()和supply()方法的區(qū)別
    • commit()是直接同步保存到磁盤,supply()是先保存到內(nèi)存再開線程保存到磁盤
    • commit()有返回值,可知道是否保存成功,supply()無返回值,是否保存成功無法知曉,除非打開xml文件查看;
    • 因為commit()是同步提交,提交過程將阻塞,直到所有的數(shù)據(jù)提交完畢,因此當(dāng)數(shù)據(jù)量大時,且不關(guān)心保存成功與否,優(yōu)先使用apply();
  • 4.總結(jié)

    SharedPreferences是Android針對程序配置文件保存推出的一個輕量存儲類,支持java基本數(shù)據(jù)類型,因為是單例對象,全局可共享訪問,大大方便了在程序各個位置獲取程序的設(shè)置數(shù)據(jù),使用簡單,創(chuàng)建對象,獲取SharedPreferences的編輯器Editor即可存取數(shù)據(jù)。

    總結(jié)

    以上是生活随笔為你收集整理的Android持久化存储(2)SharedPreferences使用介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。