数据持久化之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的优化—送工具类的更多相关文章
- 我的Android进阶之旅------>Android关于dp(dip)、sp转px的工具类
下面是一个工具类,提供了dp.sp.px之间相互转化的方法. import android.content.Context; /** * dp.sp 转换为 px 的工具类<br> * & ...
- Android单位转换 (px、dp、sp之间的转换工具类)
在Android开发中,涉及到屏幕视频问题的时候,px.dp.sp之间的转换比较重要的一部分,所以杨哥整理了一个工具类给大伙用. package com.zw.express.tool; import ...
- dp、sp 转换为 px 的工具类
public class DisplayUtil { /** * 将px值转换为dip或dp值,保证尺寸大小不变 * * @param pxValue (DisplayMetrics类中属性densi ...
- .net C# 苹果消息推送 工具类
public class AppleAPNSMessage { /// <summary> /// 苹果信息推送 证书 路径(注意测试版跟正式发布版证书上不一样) /// </sum ...
- 将数据按照gzip当时解压的工具类
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; impo ...
- 让iOS开发变得更有效率-分类、工具类
在工作中整理的一些分类与工具类,分享给大家.这些工具类可以减少项目中的代码量,让代码变得更简洁,可以大大的提升项目的效率,直接拖到项目中使用即可.下载地址:https://github.com/lee ...
- 【重学Java】多线程进阶(线程池、原子性、并发工具类)
线程池 线程状态介绍 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.线程对象在不同的时期有不同的状态.那么Java中的线程存在哪几种状态呢?Java中的线程 状态被定 ...
- java使用dbutils工具类实现小程序 管家婆记账软件
1.所需创建的包和 jar包 2.创建表结构 #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...
- 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理
在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...
随机推荐
- 【最小割】HDU 4971 A simple brute force problem.
说是最大权闭合图.... 比赛时没敢写.... 题意 一共同拥有n个任务,m个技术 完毕一个任务可盈利一些钱,学习一个技术要花费钱 完毕某个任务前须要先学习某几个技术 可是可能在学习一个任务前须要学习 ...
- ACdream: ACfun
ACfun Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatisti ...
- Connect2015 简要整理
2015 简要整理 去年 Connect(); 2014 Visual Studio Contact(); 直播笔记 对于我个人来说,今年 Connect(); 的三个重要发布: ASP.NET 5 ...
- Java设计模式菜鸟系列(十四)代理模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39856435 代理模式(Proxy):代理模式事实上就是多一个代理类出来,替原对象进行一些 ...
- Visual Studio 2015使用EF6的DBFirst模式操作Sqlite数据库
什么是DBFirst 1:到官方下载并安装32位驱动(如果你是旧版的驱动,卸载掉,然后下载最新版的,否则操作数据时会出现异常) 2:通过Nuget获取System.Data.SQLite(会默认把下面 ...
- POJ 2531-Network Saboteur(DFS)
Network Saboteur Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9435 Accepted: 4458 ...
- 王立平--Button底,点击效果设置
1.新....xml <? xml version="1.0" encoding="utf-8"?> <selector xml ...
- 采用Visual Stuidio 2010 创建网站栏
采用Visual Stuidio 2010 创建网站栏 Visual Stuidio 2010 该项目模板使创建网站栏/内容类型和列表变得非常方便. 1. 管理员身份打开Visual Stuidio ...
- 写自己的第二级处理器(3)——Verilog HDL行为语句
我们会继续上传新书<自己动手写处理器>(未公布),今天是第七章,我每星期试试4 2.6 Verilog HDL行为语句 2.6.1 过程语句 Verilog定义的模块一般包含有过程语句,过 ...
- 错误 4 自定义工具错误: 无法生成服务引用“DepartMentService”的代码。请检查其他错
原文:错误 4 自定义工具错误: 无法生成服务引用"DepartMentService"的代码.请检查其他错 问题: 错误 4 自定义工具错误: 无法生成服务引用" ...