SharedPreferences
2016-04-18 17:08
351 查看
SharedPreferences是Content中的一个接口, 用键值对的方式存储数据,SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。Editor是SharedPreferences中的静态接口,如下图
嵌套的类:
用SharedPreference存储数据的步骤一般为:获取到SharedPreferences对象,利用edit()方法获取Editor对象,通过Editor对象存储key-value键值对数据,通过commit()方法提交数据
一、Android中主要提供了三种方法用于得到 SharedPreferences 对象
1、Context 类中的 getSharedPreferences()方法
public abstract SharedPreferences getSharedPreferences (String name, int mode)
方法得到一个Sharedpreferences对象,参数name是Sharedpreferences文件的名字,没有就创建一个文件,SharedPreferences 文件都是存放在/data/data/< package name >/shared_prefs/目录下的;mode则是操作模式,主要有两种模式可以选择,MODE_PRIVATE 和 MODE_MULTI_PROCESS。默认为0,Context.MODE_PRIVATE表示只有当前的应用程序才可以对这个SharedPreferences文件进行读写,MODE_MULTI_PROCESS 则一般是用于会有多个进程对同一个 SharedPreferences 文件进行读写的情况。作用范围通常是本应用程序。
2、Activity 类中的 getPreferences()方法
这个方法和 Context 中的 getSharedPreferences()方法很相似,不过它只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为 SharedPreferences 的文件名。作用范围通常是本Activity。
3、PreferenceManager 类中的 getDefaultSharedPreferences()方法,这是一个静态方法,它接收一个 Context 参数,并自动使用当前应用程序的包名作为前缀来命名 SharedPreferences 文件。获取到的一般是本应用默认的偏好文件(包名_preferences.xml)。
二、代码实现
布局文件中新建两个按钮,一个存储数据,一个读取数据
public class MainActivity extends ActionBarActivity { private Button savedata; private Button readdata; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); savedata = (Button) findViewById(R.id.button1); readdata = (Button) findViewById(R.id.button2); savedata.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub SharedPreferences.Editor editor = getSharedPreferences("demo",MODE_PRIVATE).edit(); editor.putString("name", "Tom"); editor.putInt("age", 12); editor.commit(); } }); readdata.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub SharedPreferences sp = getSharedPreferences("demo", MODE_PRIVATE); String name = sp.getString("name", "");//取不到值默认为空 int age = sp.getInt("age", 0); Toast.makeText(MainActivity.this, name + age, Toast.LENGTH_SHORT).show(); } }); } }
当点击保存按钮后,在data/data中能看到如下目录:
可以看到,是以xml文件保存的,里面的内容如下
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <string name="name">Tom</string> <int name="age" value="12" /> </map>
点击读取按钮后,就会显示你保存的数据
至于为什么可以直接调用getSharedPreferences()而不用获取Context,再从Context中调用,从源码中就可以看到
public class Activity extends ContextThemeWrapper
Activity是继承ContextThemeWrapper类的,而ContextThemeWrapper又继承了Context类,所以Activity也继承了getSharedPreferences()方法,可以直接调用
三、OnSharedPreferenceChangeListener监听SharedPreferences的变化
四、两个不同的应用进行SharedPreference存储
应用1里存
SharedPreferences sp = getSharedPreferences("share1", Context.MODE_MULTI_PROCESS | Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE); SharedPreferences.Editor editor = sp.edit(); editor.putString("test", "test1"); editor.commit();
应用2里取
Context mContext = createPackageContext("com.example.share1",Context.CONTEXT_IGNORE_SECURITY); SharedPreferences sp = mContext.getSharedPreferences("share1",Context.MODE_MULTI_PROCESS | Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE); String data = sp.getString("test", "no");
相关文章推荐
- JavaScript的变量作用域
- css中设置margin-right:50px,其它浏览器统统没问题,但在ie6下样式出现错位
- JavaScript数据类型和变量学习小记
- CSS Sprite(s)、图片优化及实例应用那些事
- React.js语法学习总结(一)
- HTML备忘录
- Java Web 高性能开发,前端的高性能
- Jersey(1.19.1) - JSON Support
- js中createTextRange用法(focus)
- Jquery datatables 使用方法
- JavaScript常用的一些东西
- json字符串换成json数据类型
- anjularjs常用的内置方法
- web前端切图
- Caffe学习系列(8):solver优化方法
- Caffe学习系列(7):solver及其配置
- html5+javascript实现简单上传的注意细节
- HTML/CSS中a标签用法详解
- 前端优化【整理】
- Sql Server 2012 的新分页方法分析(offset and fetch) - 转载