Android存储-SharedPreferences存储数据(一)
前言
SharedPreferences类是Android五大存储方式之一,它是Android提供的用来存储一些简单配置信息的一种机制。SharedPreferences类适用于少量数据存储,存储的数据格式为Java基本数据类型(布尔值,浮点值,整型值,长整型和字符串),以key-value键值对形式写在XML文件中并进行存储的数据。且在同一设备理论上能被不同应用下所有的activity都可以访问到该xml文件;
XML文件存储位置:XML文件存储在DDMS中的File Explorer中的/data/data/相应应用包名(package name)/shared_prefs/下,
谷歌官方对于SharedPreferences的介绍:SharedPreferences 类提供了一个通用框架,以便您能够保存和检索原始数据类型的永久性键值对。 您可以使用 SharedPreferences 来保存任何原始数据:布尔值、浮点值、整型值、长整型和字符串。 此数据将跨多个用户会话永久保留(即使您的应用已终止亦如此)。
SharedPreferences的使用
1.1 getSharedPreferences方法
SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences的实例,只能通过Context提供的getSharedPreferences(String name,int mode)方法来获取SharedPreferences的实例:
/** * Retrieve and hold the contents of the preferences file 'name', returning * a SharedPreferences through which you can retrieve and modify its * values. Only one instance of the SharedPreferences object is returned * to any callers for the same name, meaning they will see each other's * edits as soon as they are made. * * @param name Desired preferences file. If a preferences file by this name * does not exist, it will be created when you retrieve an * editor (SharedPreferences.edit()) and then commit changes (Editor.commit()). * @param mode Operating mode. * * @return The single {@link SharedPreferences} instance that can be used * to retrieve and modify the preference values. * * @see #MODE_PRIVATE */ public abstract SharedPreferences getSharedPreferences(String name, @PreferencesMode int mode);-name:第一个参数用于指定SharedPreferences文件的名称(格式为xml文件),如果该名称的文件不存在则会创建一个;-mode:第二个参数用于指定操作的模式:● MODE_PRIVATE:默认操作模式,只有本应用程序才可以对这个SharedPreferences文件进行读写。● MODE_WORLD_READABLE:其他应用对这个SharedPreferences文件只能读不能修改。● MODE_WORLD_WRITEABLE:这个SharedPreferences文件能被其他的应用读写。● MODE_MULTI_PROCESS:这个模式在Android2.3之后已经弃之不用了,可以省略。
1.2 SharedPreferences.Editor对象
在使用SharedPreferences存储数据前需要了解一下SharedPreferences.Editor对象的一些主要方法:
SharedPreferences.Editor clear():删SharedPreferences中所有的数据。SharedPreferences.Editor putXxx(String key , xxx value): 参数一:向SharedPreferences存入指定数据对应的key;参数二:Java基本数据类型(布尔值,浮点值,整型值,长整型和字符串)。SharedPreferences.Editor remove(): 删除SharedPreferences中指定key对应的数据项boolean commit(): Editor编辑完成后,使用该方法提交修改。viod apply();该方法在Editor编辑完成后,也可以使用该方法提交修改。
2.1 SharedPreferences获取对象
由于SharedPreferences本身是一个接口,程序无法直接创建SharedPreferences的实例,因此首先需要使用getSharedPreferences方法获取SharedPreferences对象,如下:
SharedPreferences share = getSharedPreferences("SHARE_NAME", MODE_PRIVATE);
2.2 SharedPreferences存储数据
SharedPreferences不能直接添加和修改数据,添加和修改数据需要通过SharedPreferences的Editor来完成,如下:
SharedPreferences share = getSharedPreferences("SHARE_NAME", MODE_PRIVATE);SharedPreferences.Editor editor = share.edit();editor.putXxx("key_name" , "value");editor.commit();
2.3 同一应用SharedPreferences获取数据
SharedPreferences获取存储数据,无需在借用SharedPreferences.Editor来获取,可以直接SharedPreferences对象来获取数据,如下:
SharedPreferences share = getSharedPreferences("SHARE_NAME", MODE_PRIVATE);String str = share.getString("key_name", "");//第二个参数是默认值,如果没有key_name对应的值,则返回默认值;
2.4 不同应用SharedPreferences获取数据
对应不同的SharedPreferences获取存储数据,首先需要保证的是在存储数据的模式不能是MODE_PRIVATE模式;
1、获取其他应用的Context对象;Context otherAppContent = null;try { //设置我们要调用数据的应用包名 otherAppContent = createPackageContext("其他用包名(other-app-package-name)", CONTEXT_IGNORE_SECURITY);} catch (PackageManager.NameNotFoundException e) { e.printStackTrace();}2、在根据Context对象获取其他应用的SharedPreferences对象;SharedPreferences sharedPreferences = otherAppContent.getSharedPreferences("XML_NAME",MODE_WORLD_READABLE);3、获取到对象后,面的存储和取数据都在同一应用方式一样;
拓展
commit方法
官方介绍
● commit方法是有一个boolean的返回值● 当数据变化进行存储时是一个原子性的操作● 当两个editor对象同时对一个共享的preferences参数进行操作时,永远都是最后一个调用commit方法的editor变更了最后的数据值
apply方法
官方介绍
● apply方法是没有返回值的● apply的提交操作也是原子性的● 当两个editor同时对preferences对象编辑时,也是最后一个调用apply方法的对象编辑数据
commit和apply方法的区别:
由于commit提交是同步过程,而apply是异步提交方式,所以从效率上来说commit提交会慢写;但是apply没有返回值,无法知道存储是否失败。如果不关心提交结果是否成功,因优先考虑apply方法。
更多相关文章
- Android 自定义属性时TypedArray的使用方法
- Android pull解析XML数据
- Android TV 智能电视/盒子 APP 开发焦点控制 两种方法实例
- # Android文件存储和数据库基本知识
- android v7包 正常导入使用方法
- Android高性能编码三:数据结构和算法优化