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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android自己搭建一个实用的SharedPreferences管理类

發(fā)布時間:2024/1/17 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android自己搭建一个实用的SharedPreferences管理类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

在項目中經(jīng)常會用到SharedPreferences來存儲一些配置信息,比如用戶的賬號信息等。但是當項目大了之后如果還在要使用時再單獨創(chuàng)建和使用SharedPreferences就會造成SharedPreferences泛濫,不好管理,代碼可維護性差。因此結(jié)合實際的項目經(jīng)驗給出一個通用的SharedPreferences管理類,把項目中所有使用到的SharedPreferences統(tǒng)一管理,同時簡化SharedPreferences的使用流程。

SharedPreferences簡介

1、原理 SharedPreferences使用xml格式為Android應(yīng)用提供一種永久的數(shù)據(jù)存貯方式,并且是使用鍵值對的方式來存儲數(shù)據(jù)的。對于一個Android應(yīng)用,它存貯在文件系統(tǒng)的/data/data/app_package_name/shared_prefs/目錄下,可以被處在同一個應(yīng)用中的所有Activity 訪問。 因為SharedPreferences本身是一個接口,程序無法直接創(chuàng)建SharedPreferences的實例,只能通過Context提供的

getSharedPreferences(String name,int mode) 復(fù)制代碼

方法來獲取SharedPreferences的實例:

public abstract SharedPreferences getSharedPreferences(String name,int mode) 復(fù)制代碼

此方法接收兩個參數(shù),第一個參數(shù)用于指定SharedPreferences文件的名稱(格式為xml文件),如果指定的文件不存在則會創(chuàng)建一個。第二個參數(shù)用于指定操作模式: MODE_PRIVATE:默認操作模式,和直接傳0效果相同,表示只有當前應(yīng)用程序才可以對這個SharedPreferences文件進行讀寫 MODE_WORLD_READABLE:指定此SharedPreferences對其他程序只讀且無法修改。 MODE_WORLD_WRITEABLE:指定此SharedPreferences能被其他程序讀寫。

2、實例

SharedPreferences 的使用也很簡單,主要分為三步,1、獲取SharedPreferences 的實例2、通過Editor 往SharedPreferences 中存數(shù)據(jù)。3、獲取SharedPreferences 中的數(shù)據(jù)。

//1 private SharedPreferences sp=context.getApplicationContext().getSharedPreferences(name, Context.MODE_PRIVATE); //獲取SharedPreferences實例//2Editor editor = sp.edit();editor.putString("msg", "hello world");editor.commit(); //通過editor存儲數(shù)據(jù)//3sp.getString("msg", ""); //獲取存儲的數(shù)據(jù) 復(fù)制代碼

SharedPreferences管理類實現(xiàn)

由上面SharedPreferences的用法可知,每一個SharedPreferences都有一個名字,SharedPreferences里面存的內(nèi)容是通過key-value形式的。要把項目中所有的SharedPreferences管理起來,又可以通過名字獲取相應(yīng)的SharedPreferences,可以通過HashMap作為數(shù)據(jù)結(jié)構(gòu)來存儲SharedPreferences。如下圖:

但是如果在HashMap中只存儲SharedPreferences那么獲取到SharedPreferences后又要進行各種讀寫操作,所以可以考慮把這些操作和SharedPreferences封裝在一起放到hashMap中保存。如下圖:

使用HashMap來存儲項目中用到的所有SharedPreferences的封裝類,并且通過SharedPreferences的名稱來查找和操作。 定義一個SharedPreferencesManager類。 1、類變量

public class SharedPreferencesManager {private static final String DEFAULT_SHARED_PREFERENCE = "DEFAULT_SHARED_PREFERENCE";//默認名稱private static HashMap<String, SharedPreferencesManager> preferenceManagerHashMap = new HashMap<>();//存儲項目中的SharedPreferences。private SharedPreferences sharedPreference;private SharedPreferences.Editor editor;//和當前SharedPreferences相關(guān),用于操作SharedPreferences數(shù)據(jù)...... } 復(fù)制代碼

在SharedPreferencesManager中定義了DEFAULT_SHARED_PREFERENCE用于表示未命名的默認的SharedPreferences,preferenceManagerHashMap 用來存儲項目中使用到的SharedPreferences封裝類SharedPreferencesManager,并且可以通過SharedPreferences名字查找到。

2、生成SharedPreferences封裝類SharedPreferencesManager并存到HashMap中

private static SharedPreferencesManager getSharedPreferenceManager(Context context, String sharedPreferenceName) {if (preferenceManagerHashMap == null) preferenceManagerHashMap = new HashMap<>();// 如果preferenceManagerHashMap 為null就新建一個String name = TextUtils.isEmpty(sharedPreferenceName) ? DEFAULT_SHARED_PREFERENCE : sharedPreferenceName;SharedPreferencesManager sharedPreferencesManager = preferenceManagerHashMap.get(name);if (sharedPreferencesManager == null) {sharedPreferencesManager = new SharedPreferencesManager(context, name);preferenceManagerHashMap.put(name, sharedPreferencesManager);}return sharedPreferencesManager;} 復(fù)制代碼

getSharedPreferenceManager中通過判斷當前name是否存在對應(yīng)的sharedPreferencesManager如果沒有就生成一個sharedPreferencesManager并且存放到preferenceManagerHashMap中。

3、sharedPreferencesManager的構(gòu)造函數(shù)

private SharedPreferencesManager(Context context, String name) {sharedPreference = context.getApplicationContext().getSharedPreferences(name, Context.MODE_PRIVATE);//獲取sharedPreference editor = sharedPreference.edit();//生成editor } 復(fù)制代碼

在sharedPreferencesManager的構(gòu)造函數(shù)中生成了sharedPreference和editor用于操作數(shù)據(jù)。

4、存放數(shù)據(jù)和讀取數(shù)據(jù) 存放數(shù)據(jù),通過構(gòu)造方法里面生成的editor來進行數(shù)據(jù)的存放,putValue里面做了類型判斷。

public SharedPreferencesManager putValue(String key, Object value) {if (value instanceof Integer) {editor.putInt(key, (Integer) value);} else if (value instanceof Boolean) {editor.putBoolean(key, (Boolean) value);} else if (value instanceof Float) {editor.putFloat(key, (Float) value);} else if (value instanceof String) {editor.putString(key, (String) value);} else if (value instanceof Long) {editor.putLong(key, (Long) value);} else {String json = gson.toJson(value);editor.putString(key, json);}editor.commit();return this;} 復(fù)制代碼

讀取數(shù)據(jù)

public <T> T getValue(String key, Class<T> type) {if (type == Integer.class) {Integer value = sharedPreference.getInt(key, 0);return (T) value;} else if (type == Boolean.class) {Boolean value = sharedPreference.getBoolean(key, false);return (T) value;} else if (type == Float.class) {Float value = sharedPreference.getFloat(key, 0);return (T) value;} else if (type == String.class) {String value = sharedPreference.getString(key, "");return (T) value;} else if (type == Long.class) {Long value = sharedPreference.getLong(key, 0);return (T) value;} else {String json = sharedPreference.getString(key, "");if (TextUtils.isEmpty(json)) {return null;} else {T value = gson.fromJson(json, type);return value;}}} 復(fù)制代碼

5、SharedPreferencesManager初始化

前面已經(jīng)定義了方法數(shù)據(jù)和讀取數(shù)據(jù)的方法,下面給SharedPreferencesManager初始化,初始化一次生成項目中要用到的所有SharedPreferences實例。

public static synchronized void init(Context context, boolean createDefaultPreference, String... names) {if (createDefaultPreference) {getSharedPreferenceManager(context, DEFAULT_SHARED_PREFERENCE);}if (names == null || names.length == 0) return;for (String name : names) {getSharedPreferenceManager(context, name);}} 復(fù)制代碼

createDefaultPreference表示是否生成默認的SharedPreference,names表示項目中要生成的SharedPreferences的名稱。 6、獲取SharedPreferencesManager實例 使用單例模式來生成SharedPreferencesManager的實例

//根據(jù)name返回實例 public static synchronized SharedPreferencesManager getInstance(String name) {SharedPreferencesManager sharedPreferencesManager = preferenceManagerHashMap.get(name);if (sharedPreferencesManager == null)throw new IllegalStateException("The share preference: " + name + " is not initialized before. You have to initialize it first by calling init(Context, boolean, String...) function");return sharedPreferencesManager;}/*** 返回默認的SharedPreferencesManager 實例: {@link #DEFAULT_SHARED_PREFERENCE}** @return*/public static synchronized SharedPreferencesManager getInstance() {SharedPreferencesManager sharedPreferencesManager = preferenceManagerHashMap.get(DEFAULT_SHARED_PREFERENCE);if (sharedPreferencesManager == null)throw new IllegalStateException("The default share preference is not initialized before. You have to initialize it first by calling init(Context, boolean, String...) function");return sharedPreferencesManager;} 復(fù)制代碼

總結(jié)

有了SharedPreferencesManager類之后,就可以在項目中先使用init()方法初始化所有的SharedPreferences,然后調(diào)用實例,就可以直接簡單的操作了。源碼地址:源碼地址

總結(jié)

以上是生活随笔為你收集整理的Android自己搭建一个实用的SharedPreferences管理类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久国产精品视频 | 一卡二卡三卡四卡 | 麻豆伦理片 | 一级a毛片免费观看久久精品 | 国产a级一级片 | 日韩三级大片 | www.com在线观看 | 国产av天堂无码一区二区三区 | 日本xxxxxxxxx18| 污污网站在线观看视频 | 美女看片| 亚州综合 | 三区在线视频 | 涩漫天堂| 久久久99精品 | av成人在线电影 | 两根大肉大捧一进一出好爽视频 | 欧美无遮挡高潮床戏 | 伊人精品综合 | 在线观看视频91 | 综合国产精品 | 国产人妖ts | 亚洲夜夜爱| 免费的黄色片 | 视频一区国产精品 | 狠狠一区 | a网站在线观看 | 最好看的中文字幕国语电影mv | 日本精品一区在线 | 在线一级片 | 农村搞破鞋视频大全 | 成人在线免费观看网址 | 成人毛片在线免费观看 | 日韩亚洲一区二区 | 1024手机在线观看 | 五月天婷婷伊人 | 免费av导航 | 国产又黄又粗 | 91青青视频| 日韩不卡在线视频 | 免费看污的网站 | 校花被c到呻吟求饶 | 我会温柔一点的日剧 | 黑鬼巨鞭白妞冒白浆 | 五月天校园春色 | 人人澡人人透人人爽 | 中文字幕综合 | 日本一道本 | 大胸喷奶水www视频妖精网站 | 午夜少妇| 体内精69xxxxxx| 久久性av| www.夜色| 美女免费黄视频 | 国产视频网 | 隔壁邻居是巨爆乳寡妇 | 九九影视理伦片 | 怡春院视频 | 狠狠干一区 | 亚洲av成人精品日韩在线播放 | 免费av入口| 人人色网 | 一级特黄aa大片 | 日韩精选视频 | 日韩成人av一区二区 | 亚洲男人在线天堂 | 色乱码一区二区三区 | 国产日韩欧美91 | 五月激情婷婷综合 | 亚洲人成无码网站久久99热国产 | 波多野吉衣中文字幕 | 国产麻豆天美果冻无码视频 | 大地资源二中文在线影视免费观看 | 亚洲高清毛片一区二区 | 91免费在线视频观看 | 亚洲人在线观看 | 成人午夜视频免费观看 | 桃色综合网 | 免费看的毛片 | 精品美女一区二区 | 婷婷综合社区 | 无码人妻精品一区二 | 国产卡一卡二卡三无线乱码新区 | 99精品视频在线 | 欧美黄色大片视频 | 日本全黄裸体片 | 在线播放91 | 国产精品久久久久久久蜜臀 | 亚洲免费一二三区 | 免费视频精品 | 国内视频自拍 | 美女久久久久久久久 | 亚洲第一视频在线 | 毛片av免费看 | 神秘马戏团在线观看免费高清中文 | 国产在线高潮 | 免费av毛片 | 毛片网站在线免费观看 | 白丝动漫美女 |