学习本教程的前置条件:
Android 1.6 (API Level 4) 或者更高
熟悉Map键值对集合
数字Java文件IO的API
熟悉SQL数据库
大多数Android应用须要存储数据,即便只是在onPause()期间存储有关应用的状态信息,以便用户的操做进度不会丢失掉。
即便是最非凡的应用也须要存储用户设置,而某些应用则必须在文件和数据库中管理大量的信息。
本课程向你介绍向你介绍在Android中存储数据的主要选择,包括:
在一个共享的首选项文件中保存简单数据类型的键值对
在Android的文件系统中保存任意文件
使用有SQLite管理的数据库
保存键值对
若是你有一小撮键值对想要保存,你就应该使用SharedPreferences API. SharedPreferences对象指向一个包含键值对的文件,而且提供读写这些键值对的简单方法。 数据库
每个SharedPreferences文件由框架来进行管理,而且能够是私有的或者是共享的。 app
这里向你展现如何使用SharedPreferences API来存储和获取简单的值。 框架
注意:SharedPreferences API只用于读写键值对,而你不该该将它们同Preference API混淆,后者帮助你为你的应用设置构建用户界面(尽管它们使用了SharedPreferences做为它们保存应用设置的实现)。有关Preference的信息,见Settings指南。 学习
获得一个处理SharedPreferences的Handle
经过调用下面两种方法之一,你能够建立一个新的,或者是访问一个已经存在的共享首选项文件: spa
getSharedPreferences() — 若是你须要多个由名称标示的共享首选项文件,就可使用这个方法. 你能够从任何你的应用中的Context处调用这个方法.
getPreferences() — 若是你只须要一个用于activity的共享首选项,就可使用这个方法. 由于这个方法会获取属于这个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”
此外,若是你只须要在你的activity中用到一个共享首选项文件是,你可使用getPreferences()方法。
code
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
注意:若是你建立了带有 MODE_WORLD_READABLE 或者 MODE_WORLD_WRITEABLE的共享首选项文件,那么其它知道这个文件标识的应用也能够访问到你的数据.
写入共享首选项
为了向一个共享首选项文件写入,经过在你的SharedPreferences上调用edit(),建立一个SharedPreferences.Editor。 htm
使用诸如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);