一_ 概述
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;
}