一、常見數據存儲方式
在android中,通用的數據存儲歸納方式可以總結為一下幾類:
文件存儲:將數據存儲在文件中。文件存儲根據位置不同,可以存儲在應用的包下,也可以存儲在公共的sd上,稱之為外部存儲。
SharedPreference存儲:將數據以鍵值對的形式進行存儲,該種存儲方式一般會存一些引用的設置信息,屬于一種輕量級的存儲機制。xml
SQLite數據庫存儲:Android系統(tǒng)中的輕量級關系型數據,允許用戶進行創(chuàng)建表結構,存儲應用數據等操作。
使用ContentProvider存儲數據:在應用程序之間,共享或者傳遞相關信息時,往往可以使用Content Provider和ContentResolver實現,在前文已經做過敘述,此處不再贅述。
SharedPreference存儲
SharedPreference是Android提供的用來存儲一些簡單配置信息的一種機制,核心原理是:保存基于XML文件存儲的key-value鍵值對數據。通常使用該種方式用來存儲一些簡單信息,例如:應用版本信息,應用主題類型等等。其采用了Map數據結構來存儲數據,以鍵值對的方式存儲,可以簡單的讀取與寫入。
主要的特點和用法總結如下所示:
SharedPreferences本身是一個接口,無法直接創(chuàng)建SharedPreferences實例。可以通過Context提供的getSharedPreferences(String name, int mode)方法來獲取SharedPreferences實例,第一個參數表示要操作的xml文件名,第二個參數表示操作模式:MODE_PRIVATE、MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE,推薦使用MODE_PRIVATE。
Editor:SharedPreferences只能獲取數據,不能存儲和修改。存儲修改是通過SharedPreferences.edit()獲取的內部接口Editor對象實現。
SharedPreferences對應的xml文件位置:/data/data/package name/shared_prefs/
文件存儲
內部存儲
核心原理:上下文Context提供了很多方法來打開數據文件里的文件,常用的API如下:
getDir(String name,int mode):內部存儲根目錄下的文件夾,如果不存在則會新建。該目錄的位置是data/data/《包名》/。
getFilesDir():返回報名目錄下的文件夾,對應的目錄依然是data/data/《包名》/files/
fileList():列舉文件和文件夾,對應的目錄是data/data/《包名》/files/
openFileInput(String name):打開文件輸入流(不存在則拋出FileNotFoundException)
openFileOut(String name,int mode):打開文件輸出流(文件不存在則新建)
deleteFile(String name):刪除文件或文件夾
總結,以上這些Context提供的關于目錄和文件的操作,均是在data/dat/包名及其目錄下進行操作的。
緩存
getCacheDir:獲取應用的緩存文件夾,緩存文件夾的目錄位置是:data/data/包名/cache/
getCodeCacheDir:存放優(yōu)化過的代碼,比如JIT優(yōu)化
文件訪問模式
MODE_PRIVATE:只對在應用內可見,使用最多的就是這種模式。
MODE_APPEND:如果文件存在,則在文件末尾追加;文件不存在,則與 MODE_PRIVATE 相同。
MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE:允許其他應用訪問,但是在API17版本已經被棄用,不在推薦使用,從API版本24開始,禁止使用這兩種常量模式。
外部存儲
除了內部存儲空間可以存儲內容外,在移動設備商,均帶有外部存儲介質,即外部存儲(如SD卡)。但是隨著設備內置存儲空間增大,很多設備已經足以將內置存儲空間一分為二,一塊為內部存儲,一塊為外部存儲。使用外部存儲有兩個點需要注意:
需要檢測外部存儲介質是否已經掛載
外部存儲的空間,所有的應用都可以訪問并執(zhí)行讀寫操作。
聲明讀寫權限:WRITE_EXTERNAL_STORAGE、READ_EXTERNAL_STORAGE,從API19開始,已經不再需要聲明讀寫權限。
外部存儲空間可以分為兩個部分,私有目錄和公共目錄
私有目錄(private)
私有目錄(private)對應的存儲路徑是storage/emulated/0/Android/,私有目錄的特點是:
每個應用獨占以包名命名的私有文件夾
這些私有文件夾在應用卸載時被刪除
適合使用的場景是:非私密數據,需要隨應用卸載而刪除的一些數據
私有目錄的路徑是storage/emulated/0/Android/data/《包名》/,系統(tǒng)提供的主要API包括:
getExternalCacheDir:cache文件夾
getExternalCacheDirs:多部分cache文件夾
getExternalFilesDir:files文件夾
getExternalFIlesDirs:多部分files文件夾
getExternalMediaDirs:多媒體文件夾
公共目錄(public)
在外部存儲介質中,除了私有目錄外,還有一些公共的目錄。這些公共目錄:
所有應用共享
在應用卸載時不會被刪除
適用于非私密的數據,不需要隨應用卸載刪除
公共目錄的存儲路徑是storage/emulated/0/,系統(tǒng)提供的主要的API包括:
getExternalStorageDirectory:外部存儲根目錄
getExternalStoragePublicDirectory:外部存儲根目錄下的文件夾
getExternalStorageState:外部存儲狀態(tài)
SQLite數據庫
SQLite 一個非常流行的嵌入式數據庫,它支持 SQL 語言,并且只利用很少的內存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項目((Mozilla, PHP, Python)都使用了 SQLite。
Android 在運行時(run-time)集成了 SQLite,所以每個 Android 應用程序都可以使用 SQLite 數據庫。對于熟悉 SQL 的開發(fā)人員來時,在 Android 開發(fā)中使用 SQLite非常簡單。
存儲路徑
數據庫存儲在 data/包名/databases/ 下。
創(chuàng)建數據庫
Android 不自動提供數據庫。在 Android 應用程序中使用 SQLite,必須自己創(chuàng)建數據庫,數據表、索引等內容。
SQLiteOpenHelper
Android 提供了 SQLiteOpenHelper 幫助開發(fā)者創(chuàng)建一個數據庫,只要繼承 SQLiteOpenHelper 類即可。SQLiteOpenHelper 類根據需要,封裝了創(chuàng)建和更新數據庫使用的邏輯。SQLiteOpenHelper 的子類,至少需要實現三個方法:
構造函數:調用父類 SQLiteOpenHelper 的構造函數。這個方法需要四個參數:上下文環(huán)境(例如,一個 Activity),數據庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的數據庫模型版本的整數。
onCreate方法:該方法需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。
onUpgrage方法:該方法需要三個參數,一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個數據庫從舊的模型轉變到新的模型。
責任編輯人:CC
評論
查看更多