標籤:資料存放區
Android提供了多種方式(XML檔案方式、檔案方式、資料庫方式等)進行資料的儲存。開發人員可以根據資料類型和設計的需要,選擇適當的儲存方式進行資料存放區。
1.XML檔案管理
XML檔案更多的是用來維護應用或系統的設定檔。在Android中,goole提供了SharedPreferences這個輕型的儲存類作為XML檔案儲存體的上層介面,其本質上就是<ket, value>值對。
根據配置資訊是否對其他應用開放,SharedPreferences提供了MODE_PRIVATE.、MODE_WORLD_READABLE兩種許可權。SharedPreferences的操作分為擷取配置資訊和儲存配置資訊兩種方式。下面是擷取配置資訊的方法:
SharedPreferences settings=getSharedPreferences(PREFS_NAME,MODE_PRIVATE);
boolean silent=settings.getBoolean("silentMode", false);
儲存配置資訊和擷取配置資訊略有不同,下面是儲存配置資訊的方法:
SharedPreference settings=getShatedPreferences(PREFS_NAME, MODE_PRIVATE);
SharedPreference.Editor editor=settings.edit(); //獲得編輯器
editor.putBoolean("silentMode", mSilentMode);
editor.commit(); //提交
如果希望配置資訊對其他應用開發,在設定許可權時,可使用MODE_WORLD_READABLE。在其他應用希望擷取相應的配置資訊時,必須先擷取相應的上下文,方法如下:
context=createPackageContext("com.miaozl.text", Context.CONTEXT_IGNORE_SECURITY);
if(context != null){
SharedPreference settings=context.getSharedPreference(PREFS_NAME,Context.MODE_WORLD_READABLE);
mTest=settings.getString("text", null);
}
需要說明的是,在PreferenceActivity中內建了對SharedPreferences的支援。
如果希望ListPreference儲存或查看當前的選擇,可以調用的ListPreferences方法如下:
public void setValue(String value) //對應“android:entries”屬性的值
public void setValueIndex(int index) //對應“android:entryValues”屬性的值
public String getValue()
其他的Preference的操作方法類似於ListPreference。
2.內部檔案管理
對於位元據,Android提供了內部儲存的方式,開發人員可以將資料存放區在應用的私人空間中,避免其他程式的訪問,內部儲存的資料會在應用卸載時刪除。
內部儲存的實現非常簡單,其許可權包括MODE_PRIVATE、MODE_APPEND、MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE等。
內部儲存所在目錄為\data\data\com.company.packagename\files。如果檔案名稱為wors,其內部儲存的目錄為\data\data\com.android.mms\files\words。
(1)寫入資料
寫入字串資料的方法:
FileOutputStream out=context.openFileOutput(file,Context.MODE_WORLD_WRITEABLE);
out.write(captureArray.toString().getBytes());
out.close();
寫入結構體資料的方法:
private static void writeConfiguration(Context context, LocaleConfiguration configuration){
DataOutputStream out = null;
out=new DataOutputStream(context.openFileOutput(PREFERENCES, MODE_PRIVATE));
out.writeUTF(configuration.locale);
out.writeInt(configuration.mcc);
out.writeInt(configuration.mnc);
out.flush();
}
(2)讀取資料
讀取字串資料的方法:
StringBuilder sb=new StringBuilder();
FileInputStream words=context.openFileInput("word");
int c;
while((c=words.read()) != -1){
if(c==‘\r‘ || c==‘\n‘){
String word=sb.toString().trim();
if(word.length() > 0){
mWord.add(word);
}
sb.setLength(0);
}else{
sb.append((char)c);
}
}
words.close();
mWordCount=mWords.size();
讀取資料結構資料的方法:
private static void readConfiguration(Context context, LocaleConfiguration configuration){
DataInputStream in=null;
in=new DataInputStream(context.openFileInput(PREFERENCES));
configuration.locale=in,readUTF();
configuration.mcc=in.readInt();
configuration.mnc=in.readInt();
in.close();
對於應用攜帶的待用資料,可以放置在應用的assets目錄或res、raw目錄下。
對於assets目錄下的待用資料,存在單個檔案最大僅支援1MB的局限,讀取方式:InputStream is=getAssets().open("read_asset.txt");
對於res、raw目錄下的待用資料,讀取方式:InputStream.inputStream=resources.openRawResource(R.raw.definitions);
Android還對建立緩衝提供了支援,通過getCacheDir()可以擷取應用的緩衝路徑。在系統可用空間不足時,Android會清空緩衝,但對於開發人員而言,不應維護過多的緩衝。和內部儲存一樣,在應用卸載時,會清空並刪除緩衝目錄。
3.外部檔案管理
Android資料篇