国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

詳解Android中的SharedPreferences

2019-12-12 02:48:36
字體:
來源:轉載
供稿:網友

 SharedPreferences作為Android存儲數據方式之一,主要特點是: 

1. 只支持Java基本數據類型,不支持自定義數據類型;

2. 應用內數據共享;

3. 使用簡單.

使用方法

1、存數據

SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE); sp.edit().putString("name", "小張").putInt("age", 11).commit(); 

或者下面的寫法也可以

SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE); Editor editor = sp.edit(); editor.putString("name", "小張"); editor.putInt("age", 11); editor.commit(); 

切記不要寫成下面的形式,會導致數據無法存儲

SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE); sp.edit().putString("name", "小張"); sp.edit().putInt("age", 11); sp.edit().commit(); 

  為什么這種方式無法存儲,因為sp.edit()每次都會返回一個新的Editor對象,Editor的實現類EditorImpl里面會有一個緩存的Map,最后commit的時候先將緩存里面的Map寫入內存中的Map,然后將內存中的Map寫進XML文件中。使用上面的方式commit,由于sp.edit()又重新返回了一個新的Editor對象,緩存中的Map是空的,所以導致數據無法被存儲。

2、取數據

SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE); String name = sp.getString("name", null); int age = sp.getInt("age", 0); getSharedPreferences的具體實現是在frameworks/base/core/java/android/app/ContextImpl.java,代碼如下:[html] view plain copy@Override public SharedPreferences getSharedPreferences(String name, int mode) {   SharedPreferencesImpl sp;   synchronized (ContextImpl.class) {     ......     final String packageName = getPackageName();     ArrayMap<String, SharedPreferencesImpl> packagePrefs = sSharedPrefs.get(packageName);     if (packagePrefs == null) {       packagePrefs = new ArrayMap<String, SharedPreferencesImpl>();       sSharedPrefs.put(packageName, packagePrefs);     }     ......     sp = packagePrefs.get(name);     if (sp == null) {       File prefsFile = getSharedPrefsFile(name);       sp = new SharedPreferencesImpl(prefsFile, mode);       packagePrefs.put(name, sp);       return sp;     }   }   ......   return sp; } 

SharedPreferencesImpl是SharedPreferences接口的具體實現類,一個name對應一個SharedPreferencesImpl,一個應用程序中根據name的不同會有多個SharedPreferencesImpl。

SharedPreferencesImpl的具體實現是在frameworks/base/core/java/android/app/SharedPreferencesImpl.java,我們可以通過getSharedPreferences獲得SharedPreferences的實例,當我們調用sp.getString等get方法取數據時,實際上是直接從內存中的Map里面去取,get方法傳入的第一個參數正好是Map的key,第二個參數是當Map中沒有這個key對應值的時候,返回的默認值。

以上所述是小編給大家介紹的Android中的SharedPreferences,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安庆市| 班戈县| 永靖县| 湘乡市| 衡东县| 南涧| 潜江市| 三穗县| 赫章县| 化隆| 泰安市| 巩留县| 土默特左旗| 台北市| 迭部县| 米易县| 罗田县| 莲花县| 林州市| 阳城县| 和田市| 牡丹江市| 河池市| 中方县| 大安市| 宜川县| 绥中县| 德化县| 商都县| 扎囊县| 长乐市| 德安县| 大安市| 曲周县| 邓州市| 东至县| 平远县| 屏边| 文登市| 嘉禾县| 武邑县|