您的位置:首页 > 移动开发 > Android开发

Android SharedPreferencesUtils数据保存工具类

2016-03-08 16:18 609 查看
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Base64;
import android.util.Log;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class SPUtils {
private static final String TAG = "SPUtils";
private static SharedPreferences sp_set = null, sp_user = null, sp_cache = null;
private static final String KEY_USERDATA = "userdata";//用户数据
private static final String KEY_SET = "setdata";//软件设置数据
private static final String KEY_CACHE = "cachedata";//缓存数据

public static void init(Context context) {
sp_set = context.getSharedPreferences(KEY_SET, Context.MODE_PRIVATE);
sp_user = context.getSharedPreferences(KEY_USERDATA, Context.MODE_PRIVATE);
sp_cache = context.getSharedPreferences(KEY_CACHE, Context.MODE_PRIVATE);

}

public static void putSetData(String key, Object value) {
if (sp_set == null) {
Log.e(TAG, "should call SPUtils.init() in application", new NullPointerException());
return;
}
if (value instanceof Boolean) {
sp_set.edit().putBoolean(key, (Boolean) value).apply();
} else if (value instanceof Integer) {
sp_set.edit().putInt(key, (Integer) value).apply();
} else if (value instanceof String) {
sp_set.edit().putString(key, (String) value).apply();
} else if (value instanceof Float) {
sp_set.edit().putFloat(key, (Float) value).apply();
} else if (value instanceof Long) {
sp_set.edit().putLong(key, (Long) value).apply();
} else {
Log.e("SPUtils", "putSetData(保存类型错误)");
}
}

public static void putUserData(String key, Object value) {
if (sp_user == null) {
Log.e(TAG, "should call SPUtils.init() in application", new NullPointerException());
return;
}
if (value instanceof Boolean) {
sp_user.edit().putBoolean(key, (Boolean) value).apply();
} else if (value instanceof Integer) {
sp_user.edit().putInt(key, (Integer) value).apply();
} else if (value instanceof String) {
sp_user.edit().putString(key, (String) value).apply();
} else if (value instanceof Float) {
sp_user.edit().putFloat(key, (Float) value).apply();
} else if (value instanceof Long) {
sp_user.edit().putLong(key, (Long) value).apply();
} else {
Log.e("SPUtils", "putUserData(保存类型错误)" + value);
}
}

public static void putCacheData(String key, Object value) {
if (sp_cache == null) {
Log.e(TAG, "should call SPUtils.init() in application", new NullPointerException());
return;
}
if (value instanceof Boolean) {
sp_cache.edit().putBoolean(key, (Boolean) value).apply();
} else if (value instanceof Integer) {
sp_cache.edit().putInt(key, (Integer) value).apply();
} else if (value instanceof String) {
sp_cache.edit().putString(key, (String) value).apply();
} else if (value instanceof Float) {
sp_cache.edit().putFloat(key, (Float) value).apply();
} else if (value instanceof Long) {
sp_cache.edit().putLong(key, (Long) value).apply();
} else {
Log.e(TAG, "putCacheData(保存类型错误)");
}
}

public static SharedPreferences getSetDataSP() {
return sp_set;
}

public static SharedPreferences getUserDataSP() {
return sp_user;
}

public static SharedPreferences getCacheDataSP() {
return sp_cache;
}

public static void ClearSetData() {
sp_set.edit().clear().apply();
}

public static void ClearUserData() {
sp_user.edit().clear().apply();
}

public static void ClearCacheData() {
sp_cache.edit().clear().apply();
}

public static void removeSetData(String key) {
sp_set.edit().remove(key).apply();
}

public static void removeUserData(String key) {
sp_user.edit().remove(key).apply();
}

public static void removeCacheData(String key) {
sp_cache.edit().remove(key).apply();
}

public static <C extends Serializable> C getObject(String key, C defValue) {
ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
C result = defValue;

String value = sp_user.getString(key, null);
if (value != null) {
try {
byte[] decoded = Base64.decode(value.getBytes(), Base64.DEFAULT);
bais = new ByteArrayInputStream(decoded);
ois = new ObjectInputStream(bais);
result = (C) ois.readObject();

} catch (Exception e) {
Log.e(TAG, e.toString());

} finally {
if (ois != null) {
try {
ois.close();
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
if (bais != null) {
try {
bais.close();
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
}
}

return result;
}

public static <C extends Serializable> void putObject(String key, C value) {
ByteArrayOutputStream baos = null;
ObjectOutputStream oos = null;

try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(value);
byte[] encoded = Base64.encode(baos.toByteArray(), Base64.DEFAULT);
sp_user.edit().putString(key, new String(encoded)).apply();

} catch (IOException e) {
Log.e(TAG, e.toString());
throw new RuntimeException(e);

} finally {
if (oos != null) {
try {
oos.close();
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
if (baos != null) {
try {
baos.close();
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android