Android数据存储之Shared Preferences共享数据存储
Android数据存储之Shared Preferences共享数据存储
在Android中一共提供了4种数据存储方式,但是由于存储的这些数据都是其应用程序私有的,所以如果需要在其他应用程序中使用这些数据,就要使用Android提供的Content Provider(数据共享)。
Android中4种数据存储方式分别如下。
1、Shared Preferences:用来存储“Key-value paires”格式的数据。它是一个轻量级的键值存储机制,只可以存储基本数据类型。
2、Files:它通过fileInputStream和FileOutputStream对文件进行操作。但是在Android中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件。
3、SQLite:Android提供的一个标准的数据库,支持SQL语句
4、Network:通过网络来存储和获得数据
Shared Preferences数据存储
Shared Preferences主要是针对系统配置信息的保存,比如给程序界面设置了音效,想在下一次启动时还能够保留上次设置的音效。由于Android系统的界面是采用Activity栈的形式,所以在系统资源不足时会收回一些界面,因此,有些操作需要在不活动时保留下来,以便等再次激活时能够显示出来。
SharedPreference只允许存储基本数据类型。
获取Sharedpreference对象有两种方式,有Context的实例,比如Activity,调用下面的方法:
getSharedPreference():用这种方式获得Sharedpreference对象,需要在该方法的第一个参数指定该preference文件的名字
getPreference();用这种方式可以为你的Activity获取一个唯一的preference文件,并且不用指定名字。
并且在通过这两种方式获得Sharedpreference对象时,还要指定preference文件的读取模式,有3种模式(不是4种):
public static final int MODE_PRIVATE = 0x0000; 代表只有该程序可以访问
public static final int MODE_WORLD_READABLE = 0x0001; 代表其他程序只能进行读操作
public static final int MODE_WORLD_WRITEABLE = 0x0002; 代表其他程序可以进行读写操作
往preference文件中写数据:
1、调用edit()方法,获取一个SharedPreference.Editor对象
2、调用putBoolean()、putString()等等put...()方法存储数据
3、调用commit()方法,提交数据。因为调用put...()方法, 会先将数据存储在内存中,在调用commit()方法,将数据存储到preference文件中,这样做的好处是不必没存衣服咯数据,就对文件操作一次,节省内存开销。
从preference文件中读数据:
调用SharedPreference对象的 getBoolean、getString()等等get...()方法读取数据。
例子:
- );
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
// 不要忘记提交commit()
editor.commit();
}
}我们知道,SharedPreference 是以键值对存储的,从get和put的方式就可以看到,其实preference文件本身就是一个xml文件,打开看看就知道了。

这个用这种方式生成的preference文件,都有一个固定的位置:
File Explorer / data / data / 包名 / shared_prefs / 文件名字.xml
调用其他应用程序的Sharedpreference文件
要读取其他应用程序的,那么那个其他的应用程序的preference文件必须是可以读或者可以读写的。
步骤:
1、需要创建其他应用程序对应的Context,例如
第一个参数是其他应用许的包名--实际上Android系统是用应用程序的包名来作为该程序的标志的。
第二个参数为flags 标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。
2、在用其他应用程序的Context的getSahredPreference()方法即可获取相应的SahredPreference对象。
只有那个其他应用程序的preference文件的Mode设置为MODE_WORLD_READABLE或或者MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE,才能被外部应用程序访问。
然后用法就可在本程序中使用SahredPreference对象一样的使用。
当然上面的是通过Android提供的API操作的,也可以自己构建File文件,在解析里面的xml文件在操作,只不过这种方式更为繁琐。
File file=new File("data/data/com.tao.androidtest/shard_prefs/test.xml");
获得File文件,然后去解析里面的xml文件。
Android数据存储之Shared Preferences共享数据存储的更多相关文章
- [安卓安全] 01.安卓本地数据存储:Shared Preferences安全风险浅析
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 【C++】DLL内共享数据区在进程间共享数据(重要)
因项目需要,需要在DLL中共享数据,即DLL中某一变量只执行一次,在运行DLL中其他函数时该变量值不改变:刚开始想法理解错误,搜到了DLL进程间共享数据段,后面发现直接在DLL中定义全局变量就行,当时 ...
- Android数据存储:Shared Preferences
Android数据存储之SharedPreferences 在Android系统中提供了多种存储技术.通过这些存储技术可以将数据存储在各种存储介质上, Android 为数据存储提供了如下几种方式:1 ...
- 黎活明8天快速掌握android视频教程--20_采用ContentProvider对外共享数据
1.内容提供者是让当前的app的数据可以让其他应用访问,其他应该可以通过内容提供者访问当前app的数据库 contentProvider的主要目的是提供一个开发的接口,让其他的应该能够访问当前应用的数 ...
- VC++共享数据段实现进程之间共享数据
当我写了一个程序,我希望当这个程序同时运行两遍的时候,两个进程之间能共享一些全局变量,怎么办呢?很简单,使用VC\VC++的共享数据段.; #pragma data_seg()//恢复到正常段继续编程 ...
- Android 不同应用通过SharedPreference实现共享数据
Android不同应用之间数据的共享有许多方式,但是我觉得还是使用sharedPreference比较简单和轻量级.如果程序B想要访问程序A的sharedPreference可以通过下面的语句来实现: ...
- Android 多个activity之间的共享数据
最近打算做一个时间助手,一个service监听课表信息.课表信息可以通过另外的activity来设置,所以这里就涉及到了数据的同步问题.我设置后的信息必须同步到监听的信息去. 在java中我们用全局变 ...
- 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
1.listview入门,自定义的数据适配器 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and ...
- 多个Activity之间共享数据的方式
现在要做一个项目,多个Activity之间要共享数据,所以要考虑共享数据的方式. 其实有如下5种方式: 1.基于消息的通信机制 Intent ---bundle ,extra 数据类型有限,比如遇到 ...
随机推荐
- 阿里Java架构师面试高频300题:集合+JVM+Redis+并发+算法+框架等
前言 在过2个月即将进入9月了,然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的java开发朋友跳槽面试,无论一面还是二面,都开始考验一个Java程序员的技术功底和 ...
- lucene4.10.2实例(增删改查)
最新jar和src免费下载:http://download.csdn.net/detail/u011518709/8248403 lucene 包的组成结构:对于外部应用来说索引模块(index)和检 ...
- C#栈Stack的使用
using System; using System.Collections.Generic; namespace CSharp栈 { class Program { static void Main ...
- iOS开发遇见的坑之二:工程文件中插件和自身工程命名冲突
在升级cocoapod后,我重新管理了一下工程,其实也就是把各个类分类进行管理 类似于这样 然后编译就发现不能运行 1.其中一个错误是工程文件缺失,根据提示添加进来进行 2.有一个是pch的相对路径变 ...
- js最高效的数组去重方法
var arr=[1,2,33,2,4,5,33,5,7,8,1,3];var result=[];var temp={};for( var i=0;i<arr.length;i++){ if( ...
- CSS 文本下划线 text-decoration
定义和用法 text-decoration 属性规定添加到文本的修饰. 可能的值 值 描述 none 默认.定义标准的文本. underline 定义文本下的一条线. overline 定义文本上 ...
- Linux基础学习-MariaDB数据库管理系统
数据库管理系统 数据库是指按照某些特定结构来存储数据资料的数据仓库,数据库管理系统是一种能够对数据库中存放的数据进行建立.修改.删除.查找.维护等操作的软件程序. 初始化MariaDB服务 [root ...
- Linux-ngnix服务(二)
Nginx介绍 特性: 模块化设计,较好的扩展性 高可靠性 支持热部署:不停机更新配置文件,升级版本,更换日志文件 低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存 ...
- H.264分层结构与码流结构
H.264分层结构 H.264编码器输出的Bit流中,每个Bit都隶属于某个句法元素.句法元素被组织成有层次的结构,分别描述各个层次的信息. 在H.264 中,句法元素共被组织成 序列.图像.片.宏 ...
- 对Thymeleaf的一些笼统介绍和理解
(随手记录的,,可能没那么易看,sorry le) 先大概介绍一下关于Thymeleaf的概念和理解:首先Thymeleaf模板引擎(换句话说他是现代服务器端的Java模板引擎,) 他所对应的主要作用 ...