1.在app开发中经常会用到临时存放用户信息的时候,我们一般会用到SharedPreferences,下面给出我经常用的工具类:
SharedData
package com.antbyte.video.utils.data;
import android.content.Context;
import android.content.SharedPreferences;
import com.antbyte.video.MyApp;
import com.antbyte.video.constant.Constant;
import java.util.Map;
/**
* Created by yangjianli on 2017/8/29.
*/
public class SharedData {
private SharedPreferences mKV;
private SharedPreferences.Editor mEditor;
private final static String SHARED_FILE_NAME= Constant.APP_SHARED_FILE_NAME; //共享的文件名称
private static SharedData sharedData;
public static SharedData getInstance(){
if(sharedData == null){
sharedData = new SharedData(MyApp.mApp);
}
return sharedData;
}
/**
* 构造方法。
*
* @param context
*/
private SharedData(Context context) {
mKV = context.getSharedPreferences(SHARED_FILE_NAME, Context.MODE_PRIVATE);
mEditor = mKV.edit();
}
/**
* 构造方法。
*
* @param context
* @param kvName
* 键值表名称。
* @param mode
* 打开的模式。值为Context.MODE_APPEND, Context.MODE_PRIVATE,
* Context.WORLD_READABLE, Context.WORLD_WRITEABLE.
*/
private SharedData(Context context, String kvName, int mode) {
mKV = context.getSharedPreferences(kvName, mode);
mEditor = mKV.edit();
}
/**
* 获取保存着的boolean对象。
*
* @param key
* 键名
* @param defValue
* 当不存在时返回的默认值。
* @return 返回获取到的值,当不存在时返回默认值。
*/
public boolean getBoolean(String key, boolean defValue) {
return mKV.getBoolean(key, defValue);
}
/**
* 获取保存着的int对象。
*
* @param key
* 键名
* @param defValue
* 当不存在时返回的默认值。
* @return 返回获取到的值,当不存在时返回默认值。
*/
public int getInt(String key, int defValue) {
return mKV.getInt(key, defValue);
}
/**
* 获取保存着的long对象。
*
* @param key
* 键名
* @param defValue
* 当不存在时返回的默认值。
* @return 返回获取到的值,当不存在时返回默认值。
*/
public long getLong(String key, long defValue) {
return mKV.getLong(key, defValue);
}
/**
* 获取保存着的float对象。
*
* @param key
* 键名
* @param defValue
* 当不存在时返回的默认值。
* @return 返回获取到的值,当不存在时返回默认值。
*/
public float getFloat(String key, float defValue) {
return mKV.getFloat(key, defValue);
}
/**
* 获取保存着的String对象。
*
* @param key
* 键名
* @param defValue
* 当不存在时返回的默认值。
* @return 返回获取到的值,当不存在时返回默认值。
*/
public String getString(String key, String defValue) {
return mKV.getString(key, defValue);
}
/**
* 获取所有键值对。
*
* @return 获取到的所胡键值对。
*/
public Map<String, ?> getAll() {
return mKV.getAll();
}
/**
* 设置一个键值对,它将在{@linkplain #commit()}被调用时保存。<br/>
* 注意:当保存的value不是boolean, byte(会被转换成int保存),int, long, float,
* String等类型时将调用它的toString()方法进行值的保存。
*
* @param key
* 键名称。
* @param value
* 值。
* @return 引用的KV对象。
*/
public SharedData put(String key, Object value) {
if (value instanceof Boolean) {
mEditor.putBoolean(key, (Boolean) value);
} else if (value instanceof Integer || value instanceof Byte) {
mEditor.putInt(key, (Integer) value);
} else if (value instanceof Long) {
mEditor.putLong(key, (Long) value);
} else if (value instanceof Float) {
mEditor.putFloat(key, (Float) value);
} else if (value instanceof String) {
mEditor.putString(key, (String) value);
} else {
mEditor.putString(key, value.toString());
}
return this;
}
/**
* 移除键值对。
*
* @param key
* 要移除的键名称。
* @return 引用的KV对象。
*/
public SharedData remove(String key) {
mEditor.remove(key);
return this;
}
/**
* 清除所有键值对。
*
* @return 引用的KV对象。
*/
public SharedData clear() {
mEditor.clear();
return this;
}
/**
* 是否包含某个键。
*
* @param key
* 查询的键名称。
* @return 当且仅当包含该键时返回true, 否则返回false.
*/
public boolean contains(String key) {
return mKV.contains(key);
}
/**
* 返回是否提交成功。
*
* @return 当且仅当提交成功时返回true, 否则返回false.
*/
public boolean commit() {
return mEditor.commit();
}
}
2.常用到的方法示例
保存一个数据:
SharedData.getInstance().put("key", "value").commit();
获取保存的数据
SharedData.getInstance().getString("key", "");
注意:获取数据的时候类型要和保存时的类型保持一致。