SP的封装(数据持久化方式一)
1.先看一段描述:
Interface for accessing and modifying preference data returned by Context.getSharedPreferences(java.lang.String, int). For any particular set of preferences, there is a single instance of this class that all clients share. Modifications to the preferences must go through an SharedPreferences.Editor object to ensure the preference values remain in a consistent state and control when they are committed to storage
这段描述讲的是sp(SharedPreferences实例)获取方式:Context.getSharedPreferences(java.lang.String, int),这个方法有两个参数,第一个表示sp对应xml的文件名,第二个为这个文件的模式,私有,共有,可读,可写
修改sp需要使用编辑器:SharedPreferences.Editor,然修改后要提交:edit.commit
2.这个sp实例为整个应用程序共享,从sp维护的xml文件中,可以存取各种类型数据
3.先看看我封装SP工具类的代码,这个封装经过测试,可以很方便使用sp存取数据
package com.market.sp; import android.content.Context;
import android.content.SharedPreferences; import java.util.Set; import static android.R.id.edit; /**
* 对SharedPreference的封装
* 在包名目录下创建一个shared_pres目录,并维护一个config.xml文件
* 所有数据的读取和存入都是对这个文件的操作
* Created by Administrator on 2017/6/15.
*/ public class SPUtils { private static SharedPreferences sp = null; /**
* 将一个boolean值存入sp文件中
* @param ctx 上下文
* @param key 存储节点名称
* @param value 存储节点的值
*/
public static void putBoolean(Context ctx, String key, boolean value){
//如果sp为空,则获取创建一个sp对象
if(sp == null){
sp = ctx.getSharedPreferences("config",Context.MODE_PRIVATE);
}
sp.edit().putBoolean(key,value).commit();//获取sp编辑器,放入bool值,并提交 } /**
* 根据key读取一个boolean值value,没有的话使用defvalue代替
* @param ctx
* @param key
* @param defvalue
*/
public static boolean getBoolean(Context ctx, String key, boolean defvalue){
//如果sp为空,则获取创建一个sp对象
if(sp == null){
sp = ctx.getSharedPreferences("config",Context.MODE_PRIVATE);
}
boolean b = sp.getBoolean(key, defvalue);
return b; } /**
* 将一个String值存入sp文件中
* @param context 上下文
* @param key 存储节点名称
* @param value 存储节点的值
*/
public static void putString(Context context,String key,String value){
if(sp == null){//如果sp文件不存在,则创建该文件
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
sp.edit().putString(key, value).commit(); }
/**
* 从sp中根据key取出String值
* @param context 上下文
* @param key 存储节点名称
* @param defValue 存储节点默认值
* @return string
*/
public static String getString(Context context,String key,String defValue){
if(sp == null){//如果sp文件不存在,则创建该文件
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
String string = sp.getString(key, defValue);
return string; }
/**
* 移除sp中的一个节点
* @param context 上下文环境
* @param key 节点名称
*/
public static void removeFromSP(Context context, String key) {
if(sp == null){//如果sp文件不存在,则创建该文件
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
final SharedPreferences.Editor edit = sp.edit();
edit.remove(key); }
/**
* 从sp中根据key取出int值
* @param context
* @param key
* @param defValue
* @return
*/
public static int getInt(Context context, String key, int defValue) {
if(sp == null){//如果sp文件不存在,则创建该文件
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
int i = sp.getInt(key, defValue);
return i; }
/**
* 将一个int值存入sp文件中
* @param context
* @param key
* @param value
*/
public static void putInt(Context context,String key,int value){
if(sp == null){//如果sp文件不存在,则创建该文件
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
sp.edit().putInt(key, value).commit(); } /**
* 从sp中根据key取出float值
* @param context
* @param key
* @param defValue
* @return
*/
public static float getFloat(Context context, String key, float defValue) {
if(sp == null){//如果sp文件不存在,则创建该文件
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
float i = sp.getFloat(key, defValue);
return i; }
/**
* 将一个float值存入sp文件中
* @param context
* @param key
* @param value
*/
public static void putFloat(Context context,String key,float value){
if(sp == null){//如果sp文件不存在,则创建该文件
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
sp.edit().putFloat(key,value).commit(); } /**
* 从sp中根据key取出int值
* @param context
* @param key
* @param defValue
* @return
*/
public static Set<String> getStringSet(Context context, String key, Set<String> defValue) {
if(sp == null){//如果sp文件不存在,则创建该文件
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
Set<String> sets = sp.getStringSet(key, defValue);
return sets; }
/**
* 将一个int值存入sp文件中
* @param context
* @param key
* @param sets
*/
public static void putStringSet(Context context,String key,Set<String> sets){
if(sp == null){//如果sp文件不存在,则创建该文件
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
}
sp.edit().putStringSet(key,sets).commit(); } }
4.测试代码:
package com.market.sp; import android.app.Activity;
import android.os.Bundle;
import android.util.Log; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SPUtils.putBoolean(this,"ismy",true);
SPUtils.putFloat(this,"myfloat",23.45f); Log.e(getLocalClassName(),SPUtils.getBoolean(this,"ismy",false)+"");
Log.e(getLocalClassName(),SPUtils.getFloat(this,"myfloat",0.0f)+"");
}
5.运行效果展示
打印结果

文件结果:可以看到在/data/data/com.market.sp/生成了shared_prefs目录,且在该目录下生成config.xml文件

文件内容查看:可见存储了两个节点float和boolean,而且我们要存储的数据都在里面

SP的封装(数据持久化方式一)的更多相关文章
- iOS中的数据持久化方式
iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data. 1.属性列表 涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults ...
- iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】
在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...
- 四种数据持久化方式(下) :SQLite3 和 Core Data
在上文,我们介绍了iOS开发中的其中2种数据持久化方式:属性列表.归档解档. 本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运用: 在本节,将通过对4个文 ...
- iOS数据持久化方式及class_copyIvarList与class_copyPropertyList的区别
iOS数据持久化方式:plist文件(属性列表)preference(偏好设置)NSKeyedArchiver(归档)SQLite3CoreData沙盒:iOS程序默认情况下只能访问自己的程序目录,这 ...
- iOS开发中的4种数据持久化方式【一、属性列表与归档解档】
iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中, ...
- objective C中数据持久化方式1--对象归档
第一.数据持久化的方式: NSKeyedArchiver--对象归档 属性列表化(NSArray.NSDictionary.NSUserDefault) SQlite数据库.CoreData数据库 其 ...
- iOS -数据持久化方式-以真实项目讲解
前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...
- Redis的两种数据持久化方式比较
RDB(Redis Database) 本质:基于时间点的快照 优点: 1.RDB格式文件体积小. 2.可以通过脚本执行bgsave(非阻塞)或者save(阻塞)命令自定义时间点进行备份. 3.可以保 ...
- redis内存数据的持久化方式
转: http://blog.csdn.net/wzqzhq/article/details/64920996 概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis ...
随机推荐
- python之列表(list)的使用方法介绍
python之列表(list)介绍 在python的使用过程中,我们经常会用到列表,然而经常会遇到疑惑,下面我将详细介绍下列表使用方法. 一.列表 列表经常用到的功能使增.删.改和查功能. 1. 增 ...
- 基于 HTML5 WebGL 的 3D 仓储管理系统
仓储管理系统(WMS)是一个实时的计算机软件系统,它能够按照运作的业务规则和运算法则,对信息.资源.行为.存货和分销运作进行更完美地管理,使其最大化满足有效产出和精确性的要求.从财务软件.进销存软件C ...
- VMware下设置Centos7联网与固定IP连接Xshell
爱折腾的小伙伴应该经常会用Vmware安装一些虚拟机用于学习,但是比如装了Linux,经常操作的时候非常切换窗口的时候非常麻烦,所以很多人都会选择用Xshell来连接本地的Linux虚拟机,但是用Xs ...
- SQL语言(二) java怎样连接操作数据库中的数据
import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.S ...
- 用lua+redis实现一个简单的计数器功能 (一)
首先安装环境 依赖环境有 luajit http://luajit.org ngx_devel_kit https://github.com/simpl/ngx_devel_kit echo-ngin ...
- MFC中小笔记(三)
10.在添加新Menu之后,代码中 调用 创建的IDR_MENU1,一直出现 Debug Assertion Failed的情况.原因是,没有写入到 项目.RC中,需要更新下rc(资源文件). 然后进 ...
- 洛谷最短路计数SPFA
题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶点数与边数. 接下来M行 ...
- JAVA IO分析一:File类、字节流、字符流、字节字符转换流
因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...
- google软件测试之道读后感(一)
这几天在抽空读一本新书,久负盛名的<google软件测试之道>.之前在网络上一点一点地看过它的英文版,很受触动,还做了很长的读书笔记,现在看到了中文版,才恍觉之前的好些理解存在不恰当的地方 ...
- .NET Core快速入门教程 1、开篇:说说.NET Core的那些事儿
一..NET Core的诞生 聊 .NET Core,就不得不说他的爸爸 .NET.当年Java刚刚兴起,如火如荼,微软也非常推崇Java,当时Windows平台的Java虚拟机就是微软按照JVM标准 ...