Android中的5種資料存放區方式

來源:互聯網
上載者:User

Android中的5種資料存放區方式

資料存放區在開發中是使用最頻繁的,在這裡主要介紹Android平台中實現資料存放區的5種方式,分別是:

1 使用SharedPreferences儲存資料;  

2 檔案儲存體資料;

3 SQLite資料庫儲存資料;

4 使用ContentProvider儲存資料;

5 網路儲存資料;


Android中資料存放區的5種方法

 

 

簡介:這是Android中資料存放區的5中方法的詳細頁面,介紹了和手機軟體,Android Android中資料存放區的5中方法有關的知識,Android資料存放區
Android提供了5種方式儲存資料:
--使用SharedPreferences儲存資料;
--檔案儲存體資料;
--SQLite資料庫儲存資料;
--使用ContentProvider儲存資料;
--網路儲存資料;先說
下,Preference,File, DataBase這三種方式分別對應的目錄是/data/data/Package
Name/Shared_Pref, /data/data/Package Name/files, /data/data/Package
Name/database 。在Android中通常使用File儲存方式是用Context.openFileOutput(String fileName, int mode)和Context.openFileInput(String fileName)。
Context.openFileOutput(String fileName, int
mode)產生的檔案自動儲存在/data/data/Package Name/files目錄下,其全路徑是/data/data/Package
Name/files/fileName 。注意下,這裡的參數fileName不可以包含路徑分割符(如"/")。
通常來說,這種方式產生的檔案只能在這個apk內訪問。但這個結論是指使用Context.openFileInput(String
fileName)的方式。使用這種方式,每個apk只可以訪問自己的/data/data/Package
Name/files目錄下的檔案,原因很簡單,參數fileName中不可以包含路徑分割符,Android會自動在/data/data
/Package Name/files目錄下尋找檔案名稱為fileName的檔案。一:使用SharedPreferences儲存資料
首先說明SharedPreferences儲存方式,它是Android提供的用來儲存一些簡單配置資訊的一種機制,例如:登入使用者的使用者名稱與密碼。其採用了Map資料結構來儲存資料,以索引值的方式儲存,可以簡單的讀取與寫入,具體執行個體如下:
void ReadSharedPreferences(){
String strName,strPassword;
SharedPreferences   user = getSharedPreferences(“user_info”,0);
strName = user.getString(“NAME”,””);
strPassword = user getString(“PASSWORD”,””);
}
void WriteSharedPreferences(String strName,String strPassword){
SharedPreferences   user = getSharedPreferences(“user_info”,0);
uer.edit();
user.putString(“NAME”, strName);
user.putString(“PASSWORD” ,strPassword);
user.commit();
}
資料讀取與寫入的方法都非常簡單,只是在寫入的時候有些區別:先調用edit()使其處於編輯狀態,然後才能修改資料,最後使用commit()提交修改
的資料。實際上SharedPreferences是採用了XML格式將資料存放區到裝置中,在DDMS中的File
Explorer中的/data/data/<package
name>/shares_prefs下。以上面的資料存放區結果為例,開啟後可以看到一個user_info.xml的檔案,開啟後可以看到:
<?xml version=”1.0″ encoding=”UTF-8″?>
<map>
<string name=”NAME”>moandroid</string>
<string name=” PASSWORD”>SharedPreferences</string>
</map>
使用SharedPreferences是有些限制的:只能在同一個包內使用,不能在不同的包之間使用。二:檔案儲存體資料

 

檔案儲存體方式是一種較常用的方法,在Android中讀取/寫入檔案的方法,與
Java中實現I/O的程式是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取裝置上的檔案。
FilterInputStream, FilterOutputStream等可以到Java io
package說明中去詳細學習,不再此詳細說明,具體執行個體如下:
String fn = “moandroid.log”;
FileInputStream fis = openFileInput(fn);
FileOutputStream fos = openFileOutput(fn,Context.MODE_PRIVATE);
除此之外,Android還提供了其他函數來操作檔案,詳細說明請閱讀Android SDK。



三:網路儲存資料網路儲存方式,需要與Android 網路資料包打交道,關於Android 網路資料包的詳細說明,請閱讀Android SDK引用了Java SDK的哪些package?。四:ContentProvider
1、ContentProvider簡介
當應用繼承ContentProvider類,並重寫該類用於提供資料和儲存資料的方法,就可以向其他應用共用其資料。雖然使用其他方法也可以對外共用數
據,但資料訪問方式會因資料存放區的方式而不同,如:採用檔案方式對外共用資料,需要進行檔案操作讀寫資料;採用sharedpreferences共用數
據,需要使用sharedpreferences API讀寫資料。而使用ContentProvider共用資料的好處是統一了資料訪問方式。?
2、Uri類簡介
Uri代表了要操作的資料,Uri主要包含了兩部分資訊:1.需要操作的ContentProvider ,2.對ContentProvider中的什麼資料進行操作,一個Uri由以下幾部分組成:
1.scheme:ContentProvider(內容提供者)的scheme已經由Android所規定為:content://。
2.主機名稱(或Authority):用於唯一標識這個ContentProvider,外部調用者可以根據這個標識來找到它。
3.路徑(path):可以用來表示我們要操作的資料,路徑的構建應根據業務而定,如下:
? 要操作contact表中id為10的記錄,可以構建這樣的路徑:/contact/10
? 要操作contact表中id為10的記錄的name欄位, contact/10/name
? 要操作contact表中的所有記錄,可以構建這樣的路徑:/contact?
要操作的資料不一定來自資料庫,也可以是檔案等他儲存方式,如下:
要操作xml檔案中contact節點下的name節點,可以構建這樣的路徑:/contact/name
如果要把一個字串轉換成Uri,可以使用Uri類中的parse()方法,如下:
Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact")
3、UriMatcher、ContentUrist和ContentResolver簡介
因為Uri代表了要操作的資料,所以我們很經常需要解析Uri,並從Uri中擷取資料。Android系統提供了兩個用於操作Uri的工具類,分別為UriMatcher 和ContentUris 。掌握它們的使用,會便於我們的開發工作。
? UriMatcher:用於匹配Uri,它的用法如下:
1.首先把你需要匹配Uri路徑全部給註冊上,如下:
//常量UriMatcher.NO_MATCH表示不匹配任何路徑的返回碼(-1)。
UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//如果match()方法匹配content://com.changcheng.sqlite.provider.contactprovider/contact路徑,返回匹配碼為1
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact”, 1);//添加需要匹配uri,如果匹配就會返回匹配碼
//如果match()方法匹配 content://com.changcheng.sqlite.provider.contactprovider/contact/230路徑,返回匹配碼為2
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact/#”, 2);//#號為萬用字元

2.註冊完需要匹配的Uri後,就可以使用uriMatcher.match(uri)方法對輸入的Uri進行匹配,如果匹配就返回匹配碼,匹配碼是調用
addURI()方法傳入的第三個參數,假設匹配
content://com.changcheng.sqlite.provider.contactprovider/contact路徑,返回的匹配
碼為1。
?
ContentUris:用於擷取Uri路徑後面的ID部分,它有兩個比較實用的方法:
? withAppendedId(uri, id)用於為路徑加上ID部分
? parseId(uri)方法用於從路徑中擷取ID部分
?
ContentResolver:當外部應用需要對ContentProvider中的資料進行添加、刪除、修改和查詢操作時,可以使用
ContentResolver 類來完成,要擷取ContentResolver
對象,可以使用Activity提供的getContentResolver()方法。
ContentResolver使用insert、delete、update、query方法,來操作資料。 五:總結說明以上5中儲存方式,在以後的開發過程中,根據設計目標、效能需求、空間需求等找到合
適的資料存放區方式。Android
中的資料存放區都是私人的,其他應用程式都是無法訪問的,除非通過ContentResolver擷取其他程式共用的資料。採用檔案方式對外共用資料,需要
進行檔案操作讀寫資料;採用sharedpreferences共用資料,需要使用sharedpreferences
API讀寫資料。而使用ContentProvider共用資料的好處是統一了資料訪問方式。

 

來自: http://hi.baidu.com/maguowei/blog/item/7aca46c25574a33ae5dd3ba4.html


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.