如果有一些小数据的键值对需要保存,可以用SharedPreferences
这个类里面的API。SharedPreferences 对象指向一个包含键值对的文件,并且提供了一些读取和写入键值对的方法。SharedPreferences 是被framework层管理的,可以是私有的,也可以被共享。
注意:SharePreferences 仅仅是操作键值对,不可以和
Preference
混淆,Preference会创建一个设置界面,尽管它里面还是用
SharePreferences 来保存信息。想了解更多请阅读:Preference 和Settings。
SharedPreferences处理
你可以创建一个新 的SharePreferences 文件或者是获取一个已经存在,我们可以使用下面的方法:
getSharedPreferences()
利用这个方法可以通过名称来获取到一个可以共享的preference 文件,名称在第一个参数里面指定,可以用你的activity里面的任何一个Contextd对象
来获取它。
getPreferences() 这个方法获取的到时针对这个activity的共享preference 文件。因为这个文件仅仅是针对这个activity的,所有不需要提供一个名称。
比方说,下面的这个代码是在一个
Fragment里面执行的,获取了一个由字符串资源里面的R.string.preference_file_key命名的preference 文件,设置wie私有模式,这样这个文件就仅仅可以被你的APP访问。
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE);
当命名共享的preference文件的时候,你需要使用一个在你的APP里面唯一的字符串标示,就像"com.example.myapp.PREFERENCE_FILE_KEY"
另外,如果仅仅是针对一个activity需要共享的preference文件的时候,可以使用getPreferences()方法。
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
警告:如果创建shared preferences文件的时候使用了MODE_WORLD_READABLE
or MODE_WORLD_WRITEABLE属性,任何其他的app如果知道你的这个文件的名称,都可以访问你的数据。
写数据到
Shared Preferences
要往shared preferences里面写数据,需要调用SharedPreferences 的edit()获取一个
SharedPreferences.Editor对象。
然后用这个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();
从Shared Preferences里面读取数据
从一个shared preferences里面读取数据,可以调用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);