android SharedPreferences详解
来源:互联网 发布:苏州诺亚网络 编辑:程序博客网 时间:2024/05/16 09:22
在android的使用过程中,本地缓存数据有多种方式,其中有一种方式用于保存key-value的数据形式,那就是 -- SharedPreferences。
下面我们就来详细解读一下SharedPreferences的使用。
创建SharedPreferences有三种方式:
1.Activity.getPreferences(Mode)
2.Context.getSharedPreferences(name,mode)
3.通过PreferencesManager来获取
下面我们就来依次讲解一下,通过每一种方式来获取SharedPreferences的区别:
在讲怎么创建SharedPreferences之前,我们来看一看每一种创建方式中都有mode参数,我们就先来对这个mode参数做一个详解;mode是Context中的静态常量,有4种
1.MODE_PRIVATE 文件存在每一次对文件的操作,都会对文件进行覆盖,否则创建新文件。
2.MODE_APPEND 如果文件存在,则会往文件中追加记录,否则创建新文件(常用)
3.MODE_WORLD_READABLE
4.MODE_WORLD_WRITEABLE
从API 17开始MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE已经被注释了,不建议使用。如果要共享文件,可以通过ContentProvider的方式来实现。
好了,讲解了Mode之后,我们来看看每一种创建SharedPreferences的区别。
一、Activity.getPreferences(mode)
通过Activity.getPreferences()的方式来获取SharedPreferences很简单,只需要在Activity中调用
SharedPreferences preferences = getPreferences(MODE_APPEND);创建过后,我们往其中存放数据。
// 往apreferences存放数据SharedPreferences.Editor editor1 = apreferences.edit();editor1.putString("key", "apreferences");editor1.putString("mode", "append");editor1.commit(); // 提交数据
记住一定要commit();否则将没法将数据放入文件中。
我们在Main.Activity和Test.Activity中分别通过上面的方式来创建和保存数据,然后进入文件目录,查看创建的SharedPreferences目录文件(/data/data/<包名>/shared_prefs/)
我们会发现,创建了两个文件,并且分别以Activity的名称来作为的文件名。并且进一步实验会发现在MainActivity中插入的数据,在TestActivity中通过Activity.getPreferences的方式创建的SharedPreferences无法获取到数据。
我们追踪源代码,会发现,其实通过Activity.getPreferences()的方式来创建SharedPreferences还是调用的Context.getSharedPreferences来创建的SharedPreferences。
public SharedPreferences getPreferences(int mode) { return getSharedPreferences(getLocalClassName(), mode);}
</pre><pre name="code" class="java"><pre name="code" class="java">@Overridepublic SharedPreferences getSharedPreferences(String name, int mode) { return mBase.getSharedPreferences(name, mode);}只是通过Activity的方式来创建的时候,文件名是调用的getLocalClassName()传递的。
下面具体来看看getLocalClassName()方法,为了方便理解,我把Activity里的getLocalClassName()复制出来,加上注释和日志:
public String getLocalClassName() { // 获取包名 final String pkg = getPackageName(); Log.i("TAG", "pkg --> " + pkg); // 获取当前类的名称[包括包名] final String cls = getIntent().getComponent().getClassName(); Log.i("TAG", "cls --> " + cls); int packageLen = pkg.length(); if (!cls.startsWith(pkg) || cls.length() <= packageLen || cls.charAt(packageLen) != '.') { return cls; } return cls.substring(packageLen+1);}我们可以看到系统是通过包名和类名来构建的,因为同一个包下不可能出现重复名称的Activity,所以这样能保证,每一个Activity能够对应一个SharedPreferences。
在实际中一般都不会通过Activity的方式来创建SharedPreferences,我们一般都是通过Context的方式来创建SharedPreferences的,下面我们就来看看通过Context的方式来获取SharedPreferences。
二、Context.getSharedPreferences()
了解了上面的过后,下面的就比较简单了,直接看代码:
// 获取SharedPreferencescpreferences1 = getSharedPreferences("test", MODE_APPEND);// 插入数据SharedPreferences.Editor editor = cpreferences1.edit();editor.putString("key", "key");editor.putString("value", "value");editor.commit(); // 提交
通过Context的方式创建的preferences文件,在本应用的其它地方只要传入的文件名相同,都能获取到。这个也是最常用的方式。
三、PreferencesManager
通过PreferencesManager来获取SharedPreferences很简单。
// 通过PreferenceManager获取cpreferences2 = PreferenceManager.getDefaultSharedPreferences(this);SharedPreferences.Editor editor2 = cpreferences2.edit();editor2.putString("key", "key");editor2.putString("value", "value");editor2.commit();
这样,就已经存放了数据了,我们看看存放的文件名
可以看到文件名是:com.gavin.preferences_preferences.xml。接下来,我们通过源代码来看看文件名的构成方式。
public static SharedPreferences getDefaultSharedPreferences(Context context) { return context.getSharedPreferences(getDefaultSharedPreferencesName(context), getDefaultSharedPreferencesMode());}
private static String getDefaultSharedPreferencesName(Context context) { return context.getPackageName() + "_preferences";}可以看到,PreferencesManager中是通过获取应用包名然后拼接上 "_preferences" 来作为为配置文件名。
- android 详解 SharedPreferences
- Android之SharedPreferences详解
- Android之SharedPreferences详解
- Android SharedPreferences详解
- android SharedPreferences详解
- Android之SharedPreferences详解
- [Android]SharedPreferences详解
- Android 中SharedPreferences详解
- Android sharedpreferences使用详解
- Android SharedPreferences 详解
- Android之SharedPreferences详解
- Android之SharedPreferences详解
- Android之SharedPreferences详解
- android SharedPreferences详解
- Android SharedPreferences详解
- 【android学习】SharedPreferences详解
- Android SharedPreferences详解
- Android之SharedPreferences详解
- log4j.properties文件不放在根目录下时该怎么加载
- 学习STM32(2)-IO-AFIO(复用功能IO和调试配置)
- GIS+=地理信息+云计算技术——私有云架构设计(4)软件资源规划
- 图论——昂贵的聘礼
- 二分求幂 1
- android SharedPreferences详解
- Python爬虫基础
- UVA1626 - Brackets sequence
- htaPyfilpmiS.71
- RtlAnsiStringToUnicodeSize routine
- 如何用消息系统避免分布式事务?
- android 找不到启动activity
- Qt错误 No rule to make target needed by 'Makefile'
- Scatter文件编写