第一点: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. CSS3制作精美的iphone电话图标,不使用图片

    <!DOCTYPE HTML> <html lang=zh-cn> <head> <meta charset=utf-8> <title>C ...

  2. ASP.NET分页正品—分页真

     承接上篇博文<ASP.NET真假分页-假分页>:http://blog.csdn.net/u010773667/article/details/38845009,继续解说ASP.NE ...

  3. struts2移除标签button的id传统的价值观念问题

    <!--显示数据列表--> <tbody id="TableData" class="dataContainer" datakey=" ...

  4. smark和openfire即时通信代码

    从:http://blog.csdn.net/casuallc/article/details/34794501 server:openfire client计划:smark写 首先安装openfir ...

  5. nginx随着passenger构造ruby on rails页

    1.备份nginx简介 cp /opt/nginx/html/nginx.conf /opt/nginx/html/nginx.conf.bak 2.编者nginx简介 server { listen ...

  6. 认识javascript范围和作用域链

    范围 作用域就是变量和函数的可訪问范围.控制着变量和函数的可见性与生命周期,在JavaScript中变量的作用域有全局作用域和局部作用域. 全局和局部作用域以下用一张图来解释: 单纯的JavaScri ...

  7. Android使用HttpURLConnection下载图片

    讲到http就必须要了解URI和URL URI (uniform resource identifier)统一资源标志符: URL(uniform resource location )统一资源定位符 ...

  8. linux添加到普通用户sudo才干

    在超级用户模式添加到普通用户sudo才干 1. su -(进root用户) 2. chmod u+w /etc/sudoer 3. vim /etc/sudoers 于root ALL=(ALL) A ...

  9. Web API之消息处理管道

    Web API之消息处理管道 前言 MVC有一套请求处理的机制,当然Web API也有自己的一套消息处理管道,该消息处理管道贯穿始终都是通过HttpMessageHandler来完成.我们知道请求信息 ...

  10. JSON序列化那点事儿

    JSON序列化那点事儿 序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScri ...