安卓----第四周

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文件的操作模式

安卓----第四周_第1张图片

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权限:

对于internal storage,我们不需要声明任何权限,因为程序默认就有读写程序目录下的文件的权限。

2.2.4 文件的相关操作


安卓----第四周_第2张图片

2.3 如何访问SDcard

安卓----第四周_第3张图片
SD卡的读写

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");



你可能感兴趣的:(安卓----第四周)