Android SharedPreferences存储详解
什么是SharedPreferences存储
- 一种轻量级的数据保存方式
- 类似于我们常用的ini文件,用来保存应用程序的一些属性设置、较简单的参数设置。
- 保存现场:保存用户所作的修改或者自定义参数设定,当再次启动程序后回复上次退出时的状态。
- 将NVP(Name/Value Pair,名称/值对)保存在Android的文件系统中(XML文件),完全屏蔽的对文件系统的操作过程。
- 开发人员仅是通过调用SharedPreferences的API对NVP进行保存和读取
- 除数据保存,还提供数据共享功能。
- 主要支持3种数据访问模式(读写权限)
 • 私有(MODE_PRIVATE):仅创建程序可读、写
 • 全局读(MODE_WORLD_READABLE):创建程序可读
 写, 其他程序可读不可写
 • 全局写(MODE_WORLD_WRITEABLE):创建程序和
 其他程序都可写,但不可读!
代码demo
public static final String PREFERENCE_PACKAGE ="edu.hrbeu.SimplePreferenceDemo";
public static int MODE = Context.MODE_WORLD_READABLE +Context.MODE_WORLD_WRITEABLE;
public static final String PREFERENCE_NAME = "SaveSetting";
public void onCreate(Bundle savedInstanceState) {
	Context c = null;
	try {
		//获取SimplePreferenceDemo示例的Context
		c = this.createPackageContext(PREFERENCE_PACKAGE,
		Context.CONTEXT_IGNORE_SECURITY);
	}
	catch (NameNotFoundException e) {e.printStackTrace();}
	//将正确的SharedPreferences名称传递给函数
	SharedPreferences sharedPreferences =
	c.getSharedPreferences( PREFERENCE_NAME, MODE );
	//读取NVP
	String name = sharedPreferences.getString("Name","Tom");
	int age = sharedPreferences.getInt("Age", 20);
	float height = sharedPreferences.getFloat("Height",);
}
使用方法
1. 定义访问模式
public static int MODE = MODE_PRIVATE
//定义为私有模式
public static int MODE = Context.MODE_WORLD_READABLE +
Context.MODE_WORLD_WRITEABLE
//访问模式可组合:既可以全局读,也可以全局写,将两种模式组合(+号或|号) 成下面的方式:
2. 定义SharedPreferences的名称
- 该名称与Android文件系统中保存的XML文件同名。
- (保存在:/data/data/<应用名>/shared_prefs/)
- 相同名称的NVP内容,都会保存在同一个文件中
public static final String PREFERENCE_NAME = "SaveSetting";
3. 创建SharedPreferences对象
将访问模式和名称作为参数,传递到getSharedPreferences()函数,并获得SharedPreferences对象
SharedPreferences sharedPreferences =
getSharedPreferences ( PREFERENCE_NAME, MODE );
4.保存和修改
- 通过SharedPreferences.Editor类进行修改
- 调用commit()函数保存修改内容
 – 支持数据类型:整型、 布尔型、 浮点型和长整型等
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("Name", "Tom");
editor.putInt("Age", 20);
editor.putFloat("Height", (float)163.00 );
editor.commit();
5.读取数据
- 通过get()函数获取NVP
 – 第1个参数是NVP的名称(Name)
 – 第2个参数是在无法获取到数值的时候使用的缺省值
SharedPreferences sharedPreferences =
getSharedPreferences(PREFERENCE_NAME, MODE);
String name = sharedPreferences.getString("Name","Default Name");
int age = sharedPreferences.getInt("Age", 20);
6.数据保存位置
在android studio 下方的logcat栏的最右边有一个Device File Explorer可以查看 虚拟机的文件

文件存储在以下目录
/data/data/<package name>/shared_prefs/
7. 共享条件
- 共享者需要将SharedPreferences的访问模式设置为全局读或全局写
- 访问者需要知道共享者的包名称和SharedPreferences的名称,以通过Context获得SharedPreferences对象
- 访问者需要确切知道每个数据的名称和数据类型,用以正确读取数据
Android SharedPreferences存储详解的更多相关文章
- Android系统目录结构详解
		Android系统基于linux内核.JAVA应用,算是一个小巧精致的系统.虽是开源,但不像Linux一般庞大,娇小可亲,于是国内厂商纷纷开发出自己基于Android的操作系统.在此呼吁各大厂商眼光放 ... 
- Android SDK Manager详解
		Android基础知识——Android SDK Manager详解 做Android开发时,免不了使用Android SDK Manager,安装需要的sdk版本.buildTools版本等等. ... 
- Android中Context详解 ---- 你所不知道的Context(转)
		Android中Context详解 ---- 你所不知道的Context(转) 本文出处 :http://b ... 
- Android 自定义 View 详解
		View 的绘制系列文章: Android View 绘制流程之 DecorView 与 ViewRootImpl Android View 的绘制流程之 Measure 过程详解 (一) Andro ... 
- Android API Levels 详解
		Android API Levels 当你开发你的Android应用程序时,了解该平台API变更管理的基本方法和概念是很有帮助的.同样的,知道API级别标识以及该标识如何保障你的应用与实际硬件设备相兼 ... 
- android:ToolBar详解
		android:ToolBar详解(手把手教程) 泡在网上的日子 发表于 2014-11-18 12:49 第 124857 次阅读 ToolBar 42 来源 http://blog.mosil.b ... 
- Android之canvas详解
		首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, y ... 
- 【转】Android Canvas绘图详解(图文)
		转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android Canvas绘图详解(图文) 泡 ... 
- Android 核心分析 之八Android 启动过程详解
		Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ... 
随机推荐
- Python Ethical Hacking - Malware Packaging(4)
			Converting Python Programs to Linux Executables Note: You can not execute the program on Linux by do ... 
- Linux find 查找 并删除文件 杀掉进程
			find 默认在当前 即 . 目录下查找 du 文件名 / 目录 # 查看文件占用内存大小 1. 按照文件名查找 find / -name qwe # qwe为文件名 find / -name *qw ... 
- 设计模式:singleton模式
			目的:限制类的实例个数只能是一个 例子: #define AGT_DECLARE_SINGLETON(ClassName) \ public: \ static ClassName *Instance ... 
- MongoDB 事务,复制和分片的关系
			摘要:本文尝试对Mongo的复制和分布式事务的原理进行描述,在必要的地方,对实现的正确性进行论证,希望能为MongoDB内核爱好者提供一些参考. 1.前言 MongoDB基于wiredTiger提供的 ... 
- Java Web(1)-JavaScript
			一.JavaScript 和 html 代码的结合方式 1. 第一种方式 只需要在 head 标签中,或者在 body 标签中, 使用 script 标签 来书写 JavaScript 代码 < ... 
- HTTP request smuggling  CL.TE
			CL.TE 简介 前端通过Content-Length处理请求,通过反向代理或者负载均衡将请求转发到后端,后端Transfer-Encoding优先级较高,以TE处理请求造成安全问题. 检测 发送如下 ... 
- python基础--小数据池,代码块的最详细、深入剖析
			本文转至太白金星 一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存 ... 
- Java后端总结
			Java后端开发学习路线 编程基础 Java语言 语言基础 基础语法 面向对象 接口 容器 异常 泛型 反射 注解 I/O 图形化(如Swing) JVM 类加载机制 字节码执行机制 jvm内存模型 ... 
- ES数据库搜索
			1.倒排索引 1.倒排索引和正向索引 在全文搜索里,文档数据离不开搜索,而搜索离不开索引(没有索引搜索会很低效),倒排索引(Inverted index)是全文搜索系统里最高效的索引方法和数据结构,E ... 
- defineProperty 和Proxy双向绑定演示,你还不知道么?
			双向绑定,也就是说js中的数据传到页面,页面中的内容到js,实现同步更新,简单的演示可以直接复制下放HTML代码运行. 在这个例子中,我们使用defineProperty ,Object.define ... 
