• 数据持久化之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, "");

    以此类推 设置值也是差点儿相同的


  • 相关阅读:
    王垠:完全用Linux工作
    svn命令在linux下的使用
    svn命令在linux下的使用
    使用stty修改终端设置 stty 用法!
    关于设置SQLPLUS提示符样式的方法----登陆配置文件,动态加载提示符
    ZLIB 库
    Usermod 命令详解 ------工作中修改shell时用 usermod -s /bin/csh home
    linux kill信号列表
    转:浅谈Radius协议 -来自CSDN:http://blog.csdn.net/wangpengqi/article/details/17097221
    [转]Linux进程间通信——使用信号
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4279951.html
Copyright © 2020-2023  润新知