SharedPreferences工具类
来源:互联网 发布:算法及其描述 2 1 编辑:程序博客网 时间:2024/05/15 07:48
作为保存数据的一种方式,SharedPreferences,我们经常都会用到的,它的保存路径在data/data/你的包名/shared_prefs/保存的文件名.xml, 使用方法也很简单。so,写了一个简单的工具类,方便以后直接拷贝使用,如下
package com.lingyun.lingyunworkspaces;import android.content.Context;import android.content.SharedPreferences;import android.support.annotation.NonNull;/** * Created by dandy on 2016/5/19. */public class SharedPreferencesUtils { private static SharedPreferencesUtils instance; private static final String DEFAULT_NAME = "dandy.xml"; private String name = DEFAULT_NAME; private Context mContext; public static SharedPreferencesUtils getInstance(){ if(instance == null){ synchronized (SharedPreferencesUtils.class){ if(instance == null){ instance = new SharedPreferencesUtils(); } } } return instance; } /** * 初始化上下文参数以及文件名 * @param context,上下文 * @param name,文件名 */ public void init(Context context,String name){ this.mContext = context.getApplicationContext(); this.name = name; } /** * 保存数据,泛型方法 * @param key,键值 * @param value,数据 * @param <V> */ public <V> void setValue(@NonNull String key,V value){ SharedPreferences sp = mContext.getSharedPreferences(name,Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); if(value instanceof String){ editor.putString(key,(String)value); }else if(value instanceof Integer){ editor.putInt(key,(Integer)value); }else if(value instanceof Long){ editor.putLong(key,(Long)value); }else if(value instanceof Boolean){ editor.putBoolean(key,(Boolean)value); }else if(value instanceof Float){ editor.putFloat(key,(Float)value); } editor.commit(); } /** * 读取数据,泛型方法 * @param key,键值 * @param defaultValue,默认值 * @param <V> * @return */ public <V> V getValue(@NonNull String key,V defaultValue){ SharedPreferences sp = mContext.getSharedPreferences(name,Context.MODE_PRIVATE); Object value = defaultValue; if(defaultValue instanceof String){ value = sp.getString(key,(String)defaultValue); }else if(defaultValue instanceof Integer){ value = sp.getInt(key,(Integer) defaultValue); }else if(defaultValue instanceof Long){ value = sp.getLong(key,(Long) defaultValue); }else if(defaultValue instanceof Boolean){ value = sp.getBoolean(key, (Boolean) defaultValue); }else if(defaultValue instanceof Float){ value = sp.getFloat(key, (Float) defaultValue); } return (V)value; } /** * 清除数据 */ public void clearData(){ SharedPreferences.Editor editor = mContext.getSharedPreferences(name,Context.MODE_PRIVATE).edit(); editor.clear(); editor.commit(); }}
使用也很简单,首先,你需要初始化一下,如下
SharedPreferencesUtils.getInstance().init(this,"dandy.xml");下面数据保存
SharedPreferencesUtils.getInstance().<String>setValue("name", "dandy"); SharedPreferencesUtils.getInstance().<Integer>setValue("age", 28); SharedPreferencesUtils.getInstance().setValue("sex", "male");你会发现,第三个与前两个的使用方式不太一样,源码中有说明,因为方法都是泛型的,前面2种直接指定了数据类型,所以在第二个参数填写的数据类型与指定的类型不符合时,会报错指示,而最后一个没有指定类型,所以第二个参数可以是任何类型,但是,既然方法是泛型的,建议使用前2种的方式,指定数据类型。
接下来是获取数据并打印,
Log.i(TAG, "name = " + SharedPreferencesUtils.getInstance().<String>getValue( "name", "tabolt")); Log.i(TAG, "age = "+SharedPreferencesUtils.getInstance().<Integer>getValue("age", 26)); Log.i(TAG, "sex = "+SharedPreferencesUtils.getInstance().getValue("sex", "female"));调用的方式与保存的方式是匹配的,所以在此不再做过多说明。
输出结果:05-19 18:16:10.034 22817-22817/? I/MainActivity_share: name = dandy05-19 18:16:10.034 22817-22817/? I/MainActivity_share: age = 2805-19 18:16:10.034 22817-22817/? I/MainActivity_share: sex = male最后再看一下,若是key = sex的,在没有指定数据类型的时候,传入了错误的默认数值,会是神马结果呢,稍作修改如下:
Log.i(TAG, "name = " + SharedPreferencesUtils.getInstance().<String>getValue( "name", "tabolt")); Log.i(TAG, "age = "+SharedPreferencesUtils.getInstance().<Integer>getValue("age", 26)); Log.i(TAG, "sex = "+SharedPreferencesUtils.getInstance().getValue("sex", true));可以看出,代码并没有提示什么错误信息,下面看一下输出结果,
输出结果:05-19 18:20:06.774 23671-23671/? I/MainActivity_share: name = dandy05-19 18:20:06.774 23671-23671/? I/MainActivity_share: age = 28在这个结果中,你并没有看到key为sex的打印信息,那是因为,你传入的第二个参数类型是Boolean类型的,但是此类型并没有存入key=sex的数据,所以结果是导致应用报了ClassCastException的异常,因此看出了泛型方法中,事先填入数据类型的重要性。
下面看一下,填入数据类型的效果呢,
很明显啊 ,第二个参数类型与之不符,所以报错了。
大体就先这样了,希望方便!
0 0
- SharedPreferences工具类
- SharedPreferences 工具类
- android SharedPreferences工具类
- SharedPreferences工具类
- SharedPreferences工具类
- SharedPreferences工具类
- SharedPreferences工具类
- SharedPreferences工具类
- SharedPreferences工具类
- android SharedPreferences工具类
- Android SharedPreferences工具类
- SharedPreferences工具类封装
- SharedPreferences工具类
- SharedPreferences工具类
- SharedPreferences工具类
- SharedPreferences工具类
- SharedPreferences 超强工具类
- SharedPreferences 工具类
- Android Drawable Resources系列6:<transition>
- HZAUoj 1015: LCS
- Idea15下载Maven源码和文档
- 文章标题
- 理解JPA注解@GeneratedValue
- SharedPreferences工具类
- 今天开通博客
- hdu 2141 枚举后 二分查找
- javascript之debounce函数
- 面试算法题
- PreferenceActivity使用详解
- HDU 5605 geometry
- java Socket实现简单在线聊天(一)
- mysql 分页