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方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值