1.使用SharedPreference方便地存储数据
1.1适用与哪些地方?
保存用户偏好的参数----是否自动登陆,是否记住账号密码,是否在Wifi下才能 联网等相关信息!SharedPreferences使用xml文件, 然后类似于Map集合,使用键-值的形式来存储数据
1.2获取SharedPreference
我们可以通过以下两种方法之一创建或者访问shared preference 文件:
⑴.getSharedPreferences()— 如果需要多个通过名称参数来区分的shared preference文件, 名称可以通过第一个参数来指定。可在app中通过任何一个Context执行该方法。
Context context = getActivity();//在此Activity下使用,getContext则可在整个APP下使用
SharedPreferences sharedPref = context.getSharedPreferences(getString(R.string.preference_file_key),Context.MODE_PRIVATE);
⑵.getPreferences()— 当activity仅需要一个shared preference文件时。因为该方法会检索activity下默认的shared preference文件,并不需要提供文件名称。
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
1.3写、删Shared Preference
为了写shared preferences文件,需要通过执行edit()创建一个 SharedPreferences.Editor。通过类似putInt()与putString()等方法传递keys与values,删除只需获取Key值就可进行删除,修改只需将value值改变再写入即可,最后通过apply()---推荐使用,提交改变.
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.apply();//异步写,不占用UI
1.4读Shared Preference
为了从shared preference中读取数据,可以通过类似于 getInt() 及 getString()等方法来读取。在那些方法里面传递我们想要获取的value对应的key,并提供一个默认的value作为查找的key不存在时函数的返回值。如下:
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),default);
2.随心所欲地管理文件
2.1Android文件的操作模式
2.2存储在内部还是外部
所有的Android设备均有两个文件存储区域:"internal" 与 "external" 。 这两个名称来自于早先的Android系统,当时大多设备都内置了不可变的内存(internal storage)及一个类似于SD card(external storage)这样的可卸载的存储部件。之后有一些设备将"internal" 与 "external" 都做成了不可卸载的内置存储,虽然如此,但是这一整块还是从逻辑上有被划分为"internal"与"external"的。只是现在不再以是否可卸载进行区分了。 下面列出了两者的区别:
2.2.1 Internal storage:
1.总是可用的
2.这里的文件默认只能被我们的app所访问。
3.当用户卸载app的时候,系统会把internal内该app相关的文件都清除干净。
4.Internal是我们在想确保不被用户与其他app所访问的最佳存储区域。
2.2.2 External storage:
1.并不总是可用的,因为用户有时会通过USB存储模式挂载外部存储器,当取下挂载的这部分后,就无法对其进行访问了。
2.是大家都可以访问的,因此保存在这里的文件可能被其他程序访问。
3.当用户卸载我们的app时,系统仅仅会删除external根目录(getExternalFilesDir())下的相关文件。
4.External是在不需要严格的访问权限并且希望这些文件能够被其他app所共享或者是允许用户通过电脑访问时的最佳存储区域。.
2.2.3 获取External存储的权限
为了写数据到external storage, 必须在你manifest文件中请求WRITE_EXTERNAL_STORAGE权限:
<uses-permission android :name="android.permission.WRITE_EXTERNAL_STORAGE"/>
对于internal storage,我们不需要声明任何权限,因为程序默认就有读写程序目录下的文件的权限。
2.2.4 文件的相关操作
2.3 如何访问SDcard
2.4读取各目录下的文件
2.4.1读取raw和assets文件夹下的文件:
res/raw:
文件会被映射到R.java文件中,访问的时候直接通过资源ID即可访问,而且 他不能有目录结构,就是不能再创建文件夹
assets:
不会映射到R.java文件中,通过AssetManager来访问,能有目录结构,即可以自行创建文件夹
读取文件资源:
res/raw:
InputStreamis=getResources().openRawResource(R.raw.filename);
assets:
AssetManager am=getAssets();
InputStream is=am.open("filename");