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){
user.edit();
user.putString(“NAME”, strName);
user.putString(“PASSWORD” ,strPassword);
user.commit();
void save(String name, Integer age) {
SharedPreferences preferences = context.getSharedPreferences("test", Context.MODE_PRIVATE);
Editor editor = preferences.edit();
editor.putString("name", name);
editor.putInt("age", age);
editor.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);
檔案操作模式:
檔案(四種操作模式)
FileOutputStreamfos=
Context.openFileOutput(filename,Context.MODE_PRIVATE;Context.MODE_APPEND;
Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE )
除此之外,Android還提供了其他函數來操作檔案,詳細說明請閱讀Android SDK。
三:網絡存儲資料
網絡存儲方式
利用HttpURLConnection對象,我們可以從網絡中擷取網頁資料.
URL url = new URL("http://www.sohu.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5* 1000);//設定連接配接逾時
conn.setRequestMethod(“GET”);//以get方式發起請求
if (conn.getResponseCode() != 200) throw new RuntimeException("請求url失敗");
InputStream is = conn.getInputStream();//得到網絡傳回的輸入流
String result = readData(is, "GBK");
conn.disconnect();
//第一個參數為輸入流,第二個參數為字元集編碼
public static String readData(InputStream inSream, String charsetName) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while( (len = inSream.read(buffer)) != -1 ){
outStream.write(buffer, 0, len);
byte[] data = outStream.toByteArray();
outStream.close();
inSream.close();
return new String(data, charsetName);
四:ContentProvider
1、ContentProvider簡介
當應用繼承ContentProvider類,并重寫該類用于提供資料和存儲資料的方法,就可以向其他應用共享其資料。雖然使用其他方法也可以對外共享資料,但資料通路方式會因資料存儲的方式而不同,如:采用檔案方式對外共享資料,需要進行檔案操作讀寫資料;采用sharedpreferences共享資料,需要使用sharedpreferences API讀寫資料。而使用ContentProvider共享資料的好處是統一了資料通路方式。