第一点: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的优化—送工具类的更多相关文章

  1. 我的Android进阶之旅------>Android关于dp(dip)、sp转px的工具类

    下面是一个工具类,提供了dp.sp.px之间相互转化的方法. import android.content.Context; /** * dp.sp 转换为 px 的工具类<br> * & ...

  2. Android单位转换 (px、dp、sp之间的转换工具类)

    在Android开发中,涉及到屏幕视频问题的时候,px.dp.sp之间的转换比较重要的一部分,所以杨哥整理了一个工具类给大伙用. package com.zw.express.tool; import ...

  3. dp、sp 转换为 px 的工具类

    public class DisplayUtil { /** * 将px值转换为dip或dp值,保证尺寸大小不变 * * @param pxValue (DisplayMetrics类中属性densi ...

  4. .net C# 苹果消息推送 工具类

    public class AppleAPNSMessage { /// <summary> /// 苹果信息推送 证书 路径(注意测试版跟正式发布版证书上不一样) /// </sum ...

  5. 将数据按照gzip当时解压的工具类

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; impo ...

  6. 让iOS开发变得更有效率-分类、工具类

    在工作中整理的一些分类与工具类,分享给大家.这些工具类可以减少项目中的代码量,让代码变得更简洁,可以大大的提升项目的效率,直接拖到项目中使用即可.下载地址:https://github.com/lee ...

  7. 【重学Java】多线程进阶(线程池、原子性、并发工具类)

    线程池 线程状态介绍 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.线程对象在不同的时期有不同的状态.那么Java中的线程存在哪几种状态呢?Java中的线程 状态被定 ...

  8. java使用dbutils工具类实现小程序 管家婆记账软件

    1.所需创建的包和 jar包 2.创建表结构  #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...

  9. 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理

    在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...

随机推荐

  1. c# winform 中的 工具栏自动隐藏 splitter用法 带源码

    c# winform 中的 工具栏自动隐藏 splitter用法 带源码 代码下载地址 http://download.csdn.net/detail/simadi/7649313

  2. redis源代码解读之内存管理————zmalloc文件

    本文章主要记录本人在看redis源代码的一些理解和想法.由于功力有限,肯定会出现故障,所以.希望高手给出指正. 第一篇就是内存相关的介绍.由于我喜欢先看一些组件的东西,再看总体的流程. 先上一下代码吧 ...

  3. Java一流的施工顺序

    1.没有对象的构造 public class Test { public static int k = 0; public static int n = 99; public static int i ...

  4. JAVA中类以及成员变量和成员方法的修饰符的总结

    一  类的修饰符 java中的文件结构由大到小为:一个工程,一个工程下可以有许多包,每个包中可以有许多类. 类的修饰符分为         访问权限修饰符          和             ...

  5. StackExchange.Redis 使用-配置 (四)

    Configurationredis有很多不同的方法来配置连接字符串 , StackExchange.Redis 提供了一个丰富的配置模型,当调用Connect 或者 ConnectAsync 时需要 ...

  6. HDU 4300 Clairewd’s message(扩展KMP)

    思路:extend[i]表示原串以第i開始与模式串的前缀的最长匹配.经过O(n)的枚举,我们能够得到,若extend[i]+i=len且i>=extend[i]时,表示t即为该点之前的串,c即为 ...

  7. 读改善c#代码157个建议:建议10~12

    目录: 建议10:创建对象时需要考虑是否实现比较器 建议11:区别对待==与Equals 建议12:重写Equals时也要重写GetHashCode 一.建议10:创建对象时需要考虑是否实现比较器 比 ...

  8. 跟我一起学extjs5(37--单个模块的设计[5取得模块列表数据])

    跟我一起学extjs5(37--单个模块的设计[5取得模块列表数据])         写了几个月,总算有点盼头了,最终要从后台取得数据了.后台的spring mvc 和 service 仅仅能简单的 ...

  9. leaflet开源地图库源码 浏览器&移动设备判断(browser.js)备份

    <script> var isIe = !-[1,]; // alert('ie9 之前'+isIe); var ie = 'ActiveXObject' in window; //ale ...

  10. EnumMap demo

    优点:常量做为Key,在编译期就确定了.Enum做为key,在运行时也可以改变 package enumdemo; import java.util.EnumMap; import java.util ...