Android - 数据存储 -存储键值对

如果你有少量的键值数据需要存储,可以使用SharedPreferencesAPI。SharedPreferences对象指向一个包含键值对的文件并且提供了一些简单的方法来读取它们。每个SharedPreferences文件由framework管理而且可以时私有的或者共享的。

这里将要介绍如何使用SharedPreferences API来存储和找回数据

注意:SharedPreferences API是用来读写键值对的,所以不要和Preference API弄混了。Perference是用来为app设置创建用户界面的(虽然它们也用SharedPreferences来实现app设置的数据存储)。关于Preference API的信息, 参考Settings guide

获得SharedPreferences的句柄

你可以创建一个新的preference 文件也可以通过下面的两个方法使用一个已有的:

  • getSharedPreferences()。使用这个方法,如果你需要获得以名字为标识的多个共享的preference文件,第一个参数传递名字。你可以在app中任何的context调用

  • getPreferences()。在Activity中使用这个方法,如果你需要activity的一个共享的preference文件。因为这个方法返回了一个activity的默认共享的preference文件,所以不需要提供名字。

例如,下面是一段在Fragment中执行的代码。它访问了由R.string.preference_file_key标识的共享preferences文件然后用私有模式打开它,咋样这个文件只有你的app能进入。

1 Context context = getActivity();
2 SharedPreferences sharedPref = context.getSharedPreferences(
3         getString(R.string.preference_file_key), Context.MODE_PRIVATE);

命名preference文件时,应该用一个可唯一标识app的名字,比如"com.example.myapp.PREFERENCE_FILE_KEY"

或者,你只需要activity的一个preference 文件, 你可以使用getPreferences()方法:

1 SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

注意:如果用MODE_WORLD_READABLE或者MODE_WORLD_WRITEABLE创建preferences文件,那么其他知道文件标识的app都可以访问这个数据。 

写入Preferences

如果要写入preferences文件,创建一个SharedPreferences.Editor然后调用SharedPreferences的edit()。

把想要存储的键值对通过putInt()或putString()之类的方法传给它,然后调用commit()来保存修改。例如:

1 SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
2 SharedPreferences.Editor editor = sharedPref.edit();
3 editor.putInt(getString(R.string.saved_high_score), newHighScore);
4 editor.commit();

读Preferences

如果要从preferences文件中获得值,调用getInt()或者getString()之类的方法,然后提供你想要的的值的key,如果key不存在就会返回一个随机值,例如:

1 SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
2 int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
3 long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);

 

 

上一篇:Android - 数据存储

下一篇:Android - 数据存储 -存储文件

 

posted @ 2013-06-18 22:36  fengquanwang  阅读(3065)  评论(0编辑  收藏  举报