一_ 概述
app在开发的时候经常会遇到要存储一些文本,图片,或者是网络获取回来的更新包。这个时候就需要开辟它的存储区域
二_ 存储介绍
Android 的5中存储方式:
Internal Storage (内部存储)
External Storage (外部存储 如sd 卡)
权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
SQLite Databases (数据库)
Network Connection (网络)
Shared Preferences (键值对,轻量级文件存储)
SharePreference 是一个轻量级的存储机制,它提供一些基础类型的信息存储功能,如 boolean, Int, float, Long, String 等类型,
存储时候的类似HashMap,都是按照 “key = value” 的形式进行保存的,SharePreference 是以 xml 文件为载体,路径是 data/data/包名/share_prefs/文件名.xml。
android.content.Sharepreference借口所保存的信息只能是一些基本数据类型。
存放数据的时候需要调用到SharePreference接口的一个editor属性。
通过editor进行数据添加,移除等操作,记得要调用editor的commit方法提交。
SharePreference 保存用户登录后的 user_id, user_mobile, 这样就可以做自动登录了,每次判断SharePreference中有没有数据,有的话就自动登录。
Java代码
SharedPreferences mSharedPreferences = getSharedPreferences("loginUser", Context.MODE_PRIVATE);
Editor editor = mSharedPreferences.edit();
editor.putInt("user_id", 1);
editor.putString("user_mobile","13811111111");
editor.commit();
其中Context.MODE_PRIVATE是我们最常用的,只允许自己的程序访问下面的写法,是怎么从sharepreference中取出刚存进去的值:private SharedPreferences sp;
Java代码
private int id;
private String numbers;
SharedPreferences sp = context.getSharedPreferences("loginUser", Context.MODE_PRIVATE);
//取得user_id和手机号
numbers = sp.getString("user_mobile", "");//如果取不到值就取后面的""
id = sp.getInt("user_id", "");
下面的写法,是清除sharepreference中的值:
SharedPreferences sp = context.getSharedPreferences("loginUser", Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.clear();
editor.commit();
四种模式
1)MODE_APPEND:追加方式存储
2)MODE_PRIVATE:私有方式存储,其他应用无法访问
3)MODE_WORLD_READABLE:表示当前文件可被其他应用读取
4)MODE_WORLD_WRITEABLE:表示当前文件可被其他应用写入
三_ 存储位置
1. 存储在app的私有目录下,及在/data/data/包名下 (要root了才能看到)
dir = mContext.getDir("dir_name", Context.MODE_PRIVATE);
2. 存储在sd卡公用目录 (如果卸载该app 无法卸载该文件夹)
普通的外部存储器(应该先判断是否拥有外部存储器 External storage)
String pathString = Environment.getExternalStorageDirectory() + "/" +filename;
公有目录:
使用app 在sd卡上的私有目录 (应该先判断是否拥有外部存储器 External storage)
Environment.getExternalStoragePublicDirectory
3. 存储在sd卡的私有目录,及在sdk卡开辟一个/Android/data/包名 (如果卸载该app 自动卸载该文件夹)
//使用app 在sd卡上的私有目录 (应该先判断是否拥有外部存储器 External storage)
String pathString = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/" +filename;4. 判断是否存在外部 External storage ( 摘自官网 )
/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}