Android 的 SharePreference 存儲方式

一_ 概述

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;
}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章