前言

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方法
官方介绍
Android存储-SharedPreferences存储数据(一)_第1张图片

● commit方法是有一个boolean的返回值● 当数据变化进行存储时是一个原子性的操作● 当两个editor对象同时对一个共享的preferences参数进行操作时,永远都是最后一个调用commit方法的editor变更了最后的数据值

apply方法
官方介绍
Android存储-SharedPreferences存储数据(一)_第2张图片

● apply方法是没有返回值的● apply的提交操作也是原子性的● 当两个editor同时对preferences对象编辑时,也是最后一个调用apply方法的对象编辑数据

commit和apply方法的区别:
由于commit提交是同步过程,而apply是异步提交方式,所以从效率上来说commit提交会慢写;但是apply没有返回值,无法知道存储是否失败。如果不关心提交结果是否成功,因优先考虑apply方法。

更多相关文章

  1. Android 自定义属性时TypedArray的使用方法
  2. Android pull解析XML数据
  3. Android TV 智能电视/盒子 APP 开发焦点控制 两种方法实例
  4. # Android文件存储和数据库基本知识
  5. android v7包 正常导入使用方法
  6. Android高性能编码三:数据结构和算法优化

随机推荐

  1. 第32章、日期对话框DatePickerDialog(从零
  2. Android 6.0 之后无法找到 org.apache.ht
  3. android 退出activity 转吖转
  4. android Button 颜色的变化(点击,放开,点击
  5. Android MediaPlayer播放prepareAsync ca
  6. 【源码分享下载】每日更新之Android应用
  7. Android学习系列(7)--App消息通知机制
  8. Android 反编译资料整理
  9. Android中获取应用程序(包)的信息-----Pa
  10. Android Studio——Android Studio更新升