如果需要保存少量的键值对,可以使用SharedPreferences接口族。一个SharedPreferences对象指向一个包含若干键值对的文件,并提供基本的读写操作接口。SharedPreferences文件由框架管理,可以设成私有或者共享。
本节介绍通过SharedPreferences接口族来实现简单内容的存储和加载。
注意:SharedPreferences接口族与Preferences接口族不同,仅适用于键值对的读写,用于帮助开发者构建应用软件配置的用户接口。设置指南提供了Preferences接口族的详细介绍。
获取一个SharedPreferences的句柄
可以通过下列两种方法创建一个新的共享的偏好设置或者对一个既有文件进行读写:
- getSharedPreferences() 如果开发者需要多个共享的偏好设置文件,这个接口可以通过应用软件任意context调用,通过接口第一个参数指定偏好设置的名称。
- getPreferences() 如果Activity只需要一个偏好设置文件,使用这个接口获取唯一的文件而无需指定名称。
例如,下面展示了Fragment内部一段代码,代码通过资源字符串R.string.preference_file_key获取共享的偏好设置文件,使用私有模式打开文件从而确保只有本应用软件才能访问该文件。
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
getString(R.string.preference_file_key),Context.MODE_PRIVATE);
为文件命名时需注意保持文件名的唯一性,如“com.example.myapp.PREFERENCE_FILE_KEY”。
如果只需要一个偏好设置文件,则可以使用getPreferences()方法。
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
警告:以MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE方式创建的共享偏好设置文件,能够被任意应用软件存取。
写共享文件
调用SharedPreferences的edit()方法创建SharedPreferences.Editor即可对共享偏好设置文件进行写操作。
将期望写入的键值对传递给putInt()或者putString()方法,然后调用commit()即可保存修改。例如:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();
读共享文件
调用getInt()或者getString()方法,并以目标键为参数可以从一个共享的偏好设置文件中获取相关值,如果目标键不存在则返回一个默认值,例如:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.string.saved_high_score_default); long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);