Android資料存放區(Data Storage)(一)

來源:互聯網
上載者:User

Android提供幾種儲存持久化應用程式資料的選擇。依賴具體的需求來選擇解決適合的方案,如資料應該是應用程式私人的還是共用的,以及資料所需要的儲存空間等。

以下是可選擇的資料存放區方案:

共用偏好(Shared Preferences)

用鍵---值對的形式儲存私人的未經處理資料。

內部儲存(Internal Storage)

在裝置的記憶體上儲存私人的資料。

外部儲存(External Storage)

在共用的外部儲存空間上儲存公用的資料。

SQLite資料庫

在私人的資料庫中儲存結構化的資料。

網路連接(Network Connection)

把資料儲存在自己的互連網伺服器上。

Android提供了內容提供器(content provider),能夠你的私人資料公開給其他應用程式。內容提供器是一種公開應用程式資料的讀寫存取權限的可選組件,這種讀寫訪問會受到你所施加的任何限制的影響。

使用共用偏好

SharedPreference類提供了一個一般性的架構,它允許用原始類型資料的鍵---值對的形式來儲存和擷取持久化的資料。使用SharedPreference能夠儲存任意類型的原始類型資料:布爾型、浮點型、整數型、以及字串。這種資料會跨越使用者的會話周期被持久化儲存(即使是應用程式進程被殺死)。

有兩種方法來為應用程式擷取SharedPreferences對象:

1.  getSharedPreferences()方法---如果需要多個用名稱來標識的偏好檔案,就要使用這個方法,它的第一個參數要指定偏好檔案的名稱。

2.  getPreferences()方法---如果僅需要針對Activity的一個偏好檔案,就使用這個方法。因為這個方法僅返回當前Activity的偏好檔案,不需要提供偏好檔案的名稱。

以下是向偏好檔案中寫入資料的方法:

1.  調用edit()方法來擷取一個SharedPreferences.Editor對象;

2.  調用諸如putBoolean()和putString()等方法來添加要儲存的值;

3.  調用commit()方法來提交要儲存的新值。

使用SharedPreferences對象的諸如getBoolean()和getString()等方法來讀取被儲存的值。

以下範例程式碼儲存了計算機的靜音按鍵模式偏好:

public
class Calc
extends Activity
{
    public
static final
String PREFS_NAME
= "MyPrefsFile";

    @Override
    protected
void onCreate(Bundle state){
       super.onCreate(state);
       .
. .

       // Restore preferences
       SharedPreferences settings
= getSharedPreferences(PREFS_NAME,
0);
       boolean silent
= settings.getBoolean("silentMode",
false);
       setSilent(silent);
    }

    @Override
    protected
void onStop(){
       super.onStop();

      // We need an Editor object to make preference changes.
      // All objects are from android.context.Context
      SharedPreferences settings
= getSharedPreferences(PREFS_NAME,
0);
      SharedPreferences.Editor editor
= settings.edit();
      editor.putBoolean("silentMode",
mSilentMode);

      // Commit the edits!
      editor.commit();
    }
}

使用內部儲存

能夠把檔案直接儲存在裝置的內部儲存空間上,預設情況下,儲存在內部儲存空間上的檔案是應用程式的私人資料,其他應用程式(或使用者)不能夠訪問它們。當使用者卸載應用程式時,這些檔案也會被刪除。

以下是在內部儲存空間中建立並寫入一個私人檔案的方法:

1. 調用openFileOutput方法,這個方法需要指定檔案的名稱和操作模式。它會返回一個FileOutputStream對象。

2.  用FileOutputStream對象的write()方法把資料寫入檔案;

3.  用FileOutputStream對象的close()方法關閉輸出資料流。

例如:

String FILENAME
= "hello_file";
String
string =
"hello world!";

FileOutputStream fos
= openFileOutput(FILENAME,
Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

MODE_PRIVATE參數指示要建立這個檔案(或者,如果有同名檔案存在,則會替換舊檔案),並且讓這個檔案是應用程式的私人檔案。其他可用的模式包括:MODE_APPEND、MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE。

以下是從內部儲存中讀取一個檔案的方法:

1. 
調用openFileInput()方法,把要讀取的檔案名稱傳遞給這個方法。這個方法會返回一個FileInputStream對象。

2. 
用FileInputStream對象的read()方法從檔案中讀取位元組。

3.  用FileInputStream對象的close()方法關閉輸入資料流。

提示:如果在編譯時間要把一個靜態檔案儲存到應用程式中,那麼要把這個檔案儲存在工程的res/raw/目錄中。能夠用openRawResource()方法開啟這個檔案,這個方法需要把R.raw.<filename>的資源ID傳遞給它。這個方法會返回一個用於讀取檔案的InputStream對象(但是,不能對這個檔案進行寫入的操作)。

儲存快取檔案

如果只是要緩衝一些資料,而不是要持久的儲存它,那麼應該使用getCacheDir()方法來開啟一個File對象,它代表了應用程式要儲存臨時快取檔案的內部目錄。

當裝置的內部儲存空間不足的時候,Android可能會刪除這些快取檔案來回收儲存空間。但是,不應該依賴系統來給你清理這些檔案,應該始終自己來維護快取檔案,並且要把儲存空間的耗費限定在合理的範圍內,如1MB。當使用者卸載應用程式時,這些檔案會被刪除。

其他有用的方法

getFileDir()

擷取內部檔案被儲存的檔案系統目錄的絕對路徑。

getDir()

在內部儲存空間中建立(或開啟既存的)目錄。

deleteFile()

刪除儲存在內部儲存空間上的檔案。

fileList()

返回應用程式當前儲存的檔案數組列表。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.