SharedPreferences简介
如果你有少量的键值对信息需要存储,应该使用SharedPreferences API,它可以存储以下数据类型的数据:booleans, floats, ints, longs, and strings。一个SharedPreferences对象指向一个包括键值对的文件并且提供简单的方法对这些数据进行读写。每一个SharedPreferences文件由Android framework进行管理并且可以设置成私有或者公有的。
注意:SharedPreferences API只是用来读写键值对信息的,不要和Preference API搞混了。Preference API帮助你构建你的APP设置界面的用户接口,尽管也是使用SharedPreferences作为底层的实现来存储app的设置信息。后面会专门讲解Preference API的使用方法。
有两种方法创建一个新的或者打开一个已知的SharedPreferences文件:
1、getSharedPreferences()。如果你需要多个名字不一样的SharedPreferences文件,通过调用这个方法,传递的第一个参数即为文件的名字。然后再app的任何地方,就可以通过context(一般使用getApplicationContext()获取全局的Context)来调用这个函数。
2、getPreference()。这个方法会返回属于当前Activity的默认的Preference文件,所以没必要指定名字,这个文件是Activity私有的,不是全局共享的。
下面的代码在一个Fragment里面执行。通过使用私有模式打开,这样这个文件就是对于别的APP来说是不可见的。
Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE);
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
注意:如果是以MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE创建一个 SharedPreferences文件,别的知道这个文件名称的APP就可以访问这个文件。
2、通过调用比如putBoolean()或者putString()方法来设置值。
3、最后通过调用commit()方法来提交新的值。
读取SharedPreferences文件数据
通过调用SharedPreferences的一系列方法比如getBoolean()或者getString()方法即可。
下面是示例代码:
<span style="font-size:18px;">public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";
@Override
protected void onCreate(Bundle state){
super.onCreate(state);
. . .
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);
}
@Override
protected void onStop(){
super.onStop();
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
// Commit the edits!
editor.commit();
}
}</span>
之前的博客写了一个SharedPreferences工具类:http://blog.csdn.net/liuyi1207164339/article/details/50096853