您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Android開發(fā)中如何實(shí)現(xiàn)數(shù)據(jù)存儲,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
在Android中,可以使用幾種方式實(shí)現(xiàn)數(shù)據(jù)持久化:
Shared Preferences:共享參數(shù)形式,一種以Key-Value的鍵值對形式保存數(shù)據(jù)的方式,Android內(nèi)置的,一般應(yīng)用的配置信息,推薦使用此種方式保存。
Internal Storage:使用Android設(shè)備自帶的內(nèi)存存儲數(shù)據(jù)。
External Storage:使用外部存儲設(shè)備存儲數(shù)據(jù),一般是指Sdcard。
SQLite Databases:以SQLite數(shù)據(jù)庫存儲結(jié)構(gòu)化的數(shù)據(jù)。
SharedPreferences
也是一種輕型的數(shù)據(jù)存儲方式,它的本質(zhì)是基于XML文件存儲key-value鍵值對數(shù)據(jù),通常用來存儲一些簡單的配置信息。其存儲位置在/data/data/<包名>/shared_prefs目錄下。SharedPreferences對象本身只能獲取數(shù)據(jù)而不支持存儲和修改,存儲修改是通過Editor對象實(shí)現(xiàn)。實(shí)現(xiàn)SharedPreferences存儲的步驟如下:
一、根據(jù)Context獲取SharedPreferences對象
二、利用edit()方法獲取Editor對象。
三、通過Editor對象存儲key-value鍵值對數(shù)據(jù)。
四、通過commit()方法提交數(shù)據(jù)。
賦值:
putBoolean(KEY_SHOW_DIALOG_AT_START, false)
取值:
getBoolean(KEY_SHOW_DIALOG_AT_START,false);
SharedPreferences案例分析:
加進(jìn)一檢查框
<CheckBox
android:id="@+id/cbSent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="60dp"
android:text="測試語句"/>
定義三變量
private CheckBox cbSent;
private SharedPreferences sp;
privatestaticfinal String KEY_SHOW_DIALOG_AT_START = "showDialog";
onCreate中添加
sp = getSharedPreferences("mysp", Context.MODE_PRIVATE);
cb = (CheckBox) findViewById(R.id.cb);
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
publicvoid onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Editor e = sp.edit();
e.putBoolean(KEY_SHOW_DIALOG_AT_START, isChecked);
e.commit();
}
});
cb.setChecked(sp.getBoolean(KEY_SHOW_DIALOG_AT_START, false));
if (cb.isChecked()) {
new AlertDialog.Builder(this).setTitle("標(biāo)題").setMessage("顯示語句么?").setPositiveButton("關(guān)閉", null).show();
}
內(nèi)部存儲
Internal Storage
內(nèi)部存儲,在Android中,開發(fā)者可以直接使用設(shè)備的內(nèi)部存儲器中保存文件,默認(rèn)情況下,以這種方式保存的和數(shù)據(jù)是只能被當(dāng)前程序訪問,在其他程序中是無法訪問到的,而當(dāng)用戶卸載該程序的時(shí)候,這些文件也會(huì)隨之被刪除。
使用內(nèi)部存儲保存數(shù)據(jù)的方式,基本上也是先獲得一個(gè)文件的輸出流,然后以write()的方式把待寫入的信息寫入到這個(gè)輸出流中,最后關(guān)閉流即可,這些都是Java中IO流的操作。具體步驟如下:
使用Context.openFileOutput()方法獲取到一個(gè)FileOutputStream對象。
把待寫入的內(nèi)容通過write()方法寫入到FileOutputStream對象中。
最后使用close()關(guān)閉流。
上面介紹的Context.openFileOutput()方法有兩個(gè)重載函數(shù),它們的簽名分別是:
FileOutputStream openFileOutput(Stringname):以MODE_PRIVATE的模式打開name文件。
FileOutputStream openFileOutput(Stringname,int mode):以mode的模式打開name文件。
上面第二個(gè)重載函數(shù)中,mode為一個(gè)int類型的數(shù)據(jù),這個(gè)一般使用Context對象中設(shè)置好的常量參數(shù),有如下幾個(gè):
MODE_APPEND:以追加的方式打開一個(gè)文件,使用此模式寫入的內(nèi)容均追加在原本內(nèi)容的后面。
MODE_PRIVATE:私有模式(默認(rèn)),如果文件已經(jīng)存在會(huì)重新創(chuàng)建并替換原文件,如果不存在直接創(chuàng)建。
MODE_WORLD_READABLE:以只讀的方式打開文件。
MODE_WORLD_WRITEABLE:以只寫的方式打開文件。
還有幾個(gè)方法需要特別注意一下,這幾個(gè)方法對于文件關(guān)系提供了更好的支持,配合上面介紹的方式,就可以對文件的數(shù)據(jù)進(jìn)行常規(guī)的CRUD操作(增刪改查),方法如下:
File getFIlesDir():獲取文件系統(tǒng)的絕對路徑。
boolean deleteFile(String name):刪除一個(gè)指定文件名為name的文件。
String[] fileList():當(dāng)前應(yīng)用內(nèi)部存儲路徑下的所有文件名。
Internal Storage案例分析:
1)加進(jìn)編輯和命令按鈕
<EditText
android:gravity="top"
android:id="@+id/et"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Button
android:id="@+id/btnSave"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="保存" />
2)讀取數(shù)據(jù)
privatevoid readSavedText(){
try {
InputStream is = openFileInput("data");
byte[] bytes = newbyte[is.available()];
is.read(bytes);
is.close();
String str = new String(bytes,"utf-8");
et.setText(str);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
3保存數(shù)據(jù)
privatevoid saveCurrentText(){
try {
OutputStream os = openFileOutput("data", Context.MODE_PRIVATE);
os.write(et.getText().toString().getBytes("utf-8"));
os.flush();
os.close();
Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
return;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(this, "保存失敗", Toast.LENGTH_SHORT).show();
}
4)開始讀取數(shù)據(jù)和定義保存
et = (EditText) findViewById(R.id.et);
btnSave = (Button) findViewById(R.id.btnSave);
readSavedText();
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
publicvoid onClick(View v) {
saveCurrentText();
}
});
關(guān)于“Android開發(fā)中如何實(shí)現(xiàn)數(shù)據(jù)存儲”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。