首页 > 代码库 > 数据持久化之SP的优化—送工具类
数据持久化之SP的优化—送工具类
第一点:sp存储的是键值对
getSharedPreferences 第一个参数是你保存文件的名字,第个是保存的模式一般可以默认为0
先看普通 使用SP 存储String类型字符串吧
SharedPreferences.Editor edit = getSharedPreferences("config", 0).edit();
edit.putString("name", "tom");
edit.putInt("age", 21);
edit.putBoolean("married", false);
edit.commit();
因为SP是无法直接编辑取值的就我们不能直接调用service里的方法一样,我们需要系统给我们提供的接口 使用 .edit 就可以得到一个Editor接口 就可以进行编辑了,可以看得出SP可以存储 数据类型 基本是可以支持的
然后再看 用SP读取内容 那就更简单了
SharedPreferences sp=context.getSharedPreferences(SP_NAME, 0);
sp.getString(key, defValue);
好啦,既然要抽出到工具类的话 ,就必须要知道sp 使用需要那些东西
第一个 Context 要让SP知道你在那个类里使用他
第二个 key 文件名
第三个 value 设置值需要 但是获取值并不需要
好啦 万能的SP工具类 要出现了 鼓掌
package com.xiaoxin.NewsPaper.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.apache.commons.codec.binary.Base64; import android.content.Context; import android.content.SharedPreferences; import android.text.TextUtils; /** * SharePreferences操作工具类 */ public class SharePrefUtil { private static String tag = SharePrefUtil.class.getSimpleName(); private final static String SP_NAME = "config"; private static SharedPreferences sp; /** * 保存布尔值 * * @param context * @param key * @param value */ public static void saveBoolean(Context context, String key, boolean value) { if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); sp.edit().putBoolean(key, value).commit(); } /** * 保存字符串 * * @param context * @param key * @param value */ public static void saveString(Context context, String key, String value) { if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); sp.edit().putString(key, value).commit(); } public static void clear(Context context){ if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); sp.edit().clear().commit(); } /** * 保存long型 * * @param context * @param key * @param value */ public static void saveLong(Context context, String key, long value) { if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); sp.edit().putLong(key, value).commit(); } /** * 保存int型 * * @param context * @param key * @param value */ public static void saveInt(Context context, String key, int value) { if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); sp.edit().putInt(key, value).commit(); } /** * 保存float型 * * @param context * @param key * @param value */ public static void saveFloat(Context context, String key, float value) { if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); sp.edit().putFloat(key, value).commit(); } /** * 获取字符值 * * @param context * @param key * @param defValue * @return */ public static String getString(Context context, String key, String defValue) { if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); return sp.getString(key, defValue); } /** * 获取int值 * * @param context * @param key * @param defValue * @return */ public static int getInt(Context context, String key, int defValue) { if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); return sp.getInt(key, defValue); } /** * 获取long值 * * @param context * @param key * @param defValue * @return */ public static long getLong(Context context, String key, long defValue) { if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); return sp.getLong(key, defValue); } /** * 获取float值 * * @param context * @param key * @param defValue * @return */ public static float getFloat(Context context, String key, float defValue) { if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); return sp.getFloat(key, defValue); } /** * 获取布尔值 * * @param context * @param key * @param defValue * @return */ public static boolean getBoolean(Context context, String key, boolean defValue) { if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); return sp.getBoolean(key, defValue); } /** * 将对象进行base64编码后保存到SharePref中 * * @param context * @param key * @param object */ public static void saveObj(Context context, String key, Object object) { if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = null; try { oos = new ObjectOutputStream(baos); oos.writeObject(object); // 将对象的转为base64码 String objBase64 = new String(Base64.encodeBase64(baos .toByteArray())); sp.edit() .putString(key,objBase64).commit(); oos.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 将SharePref中经过base64编码的对象读取出来 * * @param context * @param key * @param defValue * @return */ public static Object getObj(Context context, String key) { if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); String objBase64 = sp.getString(key, null); if (TextUtils.isEmpty(objBase64)) return null; // 对Base64格式的字符串进行解码 byte[] base64Bytes = Base64.decodeBase64(objBase64.getBytes()); ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes); ObjectInputStream ois; Object obj = null; try { ois = new ObjectInputStream(bais); obj = (Object) ois.readObject(); ois.close(); } catch (Exception e) { e.printStackTrace(); } return obj; } }
获取值得使用 用法
String result = SharePrefUtil.getString(ct,
QLApi.NEWS_CENTER_CATEGORIES, "");
以此类推 设置值也是差不多的
数据持久化之SP的优化—送工具类