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

首頁 > 系統 > Android > 正文

詳解Android中的SharedPreferences

2019-10-23 18:27:50
字體:
來源:轉載
供稿:網友

 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,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永和县| 台北县| 陈巴尔虎旗| 疏附县| 龙门县| 龙川县| 平利县| 贡觉县| 博爱县| 年辖:市辖区| 肇州县| 六盘水市| 论坛| 西吉县| 贡嘎县| 桐柏县| 长岛县| 大庆市| 渑池县| 个旧市| 文登市| 溧水县| 南溪县| 靖州| 定兴县| 获嘉县| 韶关市| 旺苍县| 桃源县| 武隆县| 万载县| 岑溪市| 河池市| 左权县| 文山县| 赤水市| 汽车| 庆元县| 若尔盖县| 舟曲县| 卢湾区|