Android开发教程:数据储存之SharedPreferences

转:http://liuzhichao.com/p/522.html


在我们使用的桌面软件中,通常会有一个“选项”菜单,选项是对软件的常规或核心设置。在JavaSE和JavaEE中常用的是*.properties,在Windows平台下常使用*.ini文件。在Android中我们使用SharedPreferences来完成这种对配置文件的读写。SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此保存的数据主要是简单类型的键值对(key-value),它保存的是一个XML文件。

  1. getPreferences():获取到作用域是本Activity的preference,是Activity类中的方法,只需指定mode
  2. getSharedPreferences():获取到作用域是本应用程序的preference
  3. getDefaultSharedPreferences():每个应用有一个默认的偏好文件preferences.xml,使用getDefaultSharedPreferences获取

SharedPreferences常用的属性和方法

方法名称 描述
public abstract boolean contains (String key) 判断SharedPreferences是否包含特定key的数据
public abstract SharedPreferences.Editor edit () 返回一个Edit对象用于操作SharedPreferences
public abstract Map<String, ?> getAll () 获取SharedPreferences数据里全部的key-value对
getXXX(String key,XXX defvlaue) 获取SharedPreferences数据指定key所对应的value,如果该key不存在,返回默认值defValue。其中XXX可以是boolean、float、int、long、String等基本类型的值

由于SharedPreference是一个接口,而且在这个接口里并没有提供写入数据和读取数据的能力。但是在其内部有一个Editor内部的接口,Edit这个接口有一系列的方法用于操作SharedPreference。

Editor接口的常用方法

方法名称 描述
public abstract SharedPreferences.Editor clear () 清空SharedPreferences里所有的数据
public abstract boolean commit () 当Editor编辑完成后,调用该方法可以提交修改,而且必须要调用这个数据才修改
public abstract SharedPreferences.Editor putXXX (String key, boolean XXX) 向SharedPreferences存入指定的key对应的数据,其中XXX可以是boolean、float、int、long、String等基本类型的值
public abstract SharedPreferences.Editor remove (String key) 删除SharedPreferences里指定key对应的数据项

 

SharedPreferences是一个接口,程序是无法创建SharedPreferences实例的,可以通过Context.getSharedPreferences(String name.int mode)来得到一个SharedPreferences实例

name:是指文件名称,不需要加后缀.xml,系统会自动为我们添加上。一般这个文件存储在/data/data/<package name>/shared_prefs下(这个面试常问到)

mode:是指定读写方式,其值有三种,分别为:

Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写

Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写

Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读写。

下面是一个使用SharedPreferences的简单例子,通过SharedPreferences记下程序运行的次数:

public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		sp = getSharedPreferences("data", MODE_PRIVATE);
		Editor editor = sp.edit();
		int count = sp.getInt("count", 1);
		new AlertDialog.Builder(this)
		.setMessage("这是您第"+count+"次使用本软件")
		.create()
		.show();
		editor.putInt("count", ++count);
		editor.commit();

	}

读写其他应用SharedPreferences

在有时的开发过程中,我们可能要访问其他的应用程序的SharedPreferences,要实现这样的功能,我们必须要保证要访问的那个应用程序的SharedPreferences的访问权限要是MODE_WORLD_READABLE,这表明该SharedPreferences可以被其他应用程序读取,如果指定的MODE_WORLD_WRITEABLE表明该SharedPreferences可以被其他应用程序读取写入其实现思路如下

1、  获得其他应用程序对应的Context

2、  通过这个Context得到这个应用程序的SharedPreferences,然后再利用这个SharedPreferences读取内容

// 获取其他应用程序的Context
        Context otherContext = createPackageContext("com.jiahui.preferences",CONTEXT_IGNORE_SECURITY);
      // 获取其他应用程序的SharedPreferences
       SharedPreferences preferences = otherContext.getSharedPreferences("test",Context.MODE_WORLD_READABLE);

你可能感兴趣的:(Android开发教程:数据储存之SharedPreferences)