Android的4種數(shù)據(jù)存儲(chǔ)方式
1.SharePReferences --用于存儲(chǔ)格式簡(jiǎn)單、量少的數(shù)據(jù)
應(yīng)用程序僅有少量的數(shù)據(jù)需要保存,而且這些數(shù)據(jù)的格式很簡(jiǎn)單,都是普通的字符串,標(biāo)量類型的值的時(shí)候,對(duì)于這種數(shù)據(jù),Android提供了SharePreference進(jìn)行保存,SharePreferences保存的信息主要是類似與配置信息格式的數(shù)據(jù),保存形式類似于Map中的簡(jiǎn)單鍵值key-value對(duì)。特點(diǎn)是它將read與write進(jìn)行了分離。Sharepreferences接口主要負(fù)責(zé)讀取應(yīng)用程序的Preferences數(shù)據(jù)。
1)boolean conntains(String key):判斷SharePreferences是否包含特定key的數(shù)據(jù)
2)getXxx(String key,xxx defValue):獲取Preferences數(shù)據(jù)里指定key對(duì)應(yīng)的value,如果該key不存在,返回默認(rèn)值defValue。其中xxx可為各種基本數(shù)據(jù)類型。
3)clear():清空SharePreferences內(nèi)所有數(shù)據(jù)
4)putXxx(String key,xxx value):向Preferences中存入指定key對(duì)應(yīng)的數(shù)據(jù),其中xxx為基本數(shù)據(jù)類型。
5)remove(String key):刪除Preferences中指定key對(duì)應(yīng)的數(shù)據(jù)
6)boolean commit():當(dāng)Editor編輯完成后,調(diào)用該方法提交修改
值得一提的是,SharePreferences本身是一個(gè)接口,而程序無(wú)法直接創(chuàng)建SharePreferences實(shí)例,只能通過(guò)Context提供的getSharePreferences(String name,int mode)方法來(lái)獲取SharePreferences實(shí)例。
2.File存儲(chǔ)
File存儲(chǔ)我們要先打開應(yīng)用存儲(chǔ)的數(shù)據(jù)文件夾的IO流,Context提供了如下的方式來(lái)打開:
FileInputStream openFileinput(String name)
FileOutputStream openFileOutput(String name,int mode)
mode參數(shù)支持如下值:
MODE_APPEND 以追加方式,當(dāng)前應(yīng)用程序本身可以向文件中添加內(nèi)容而不覆蓋原有內(nèi)容
MODE_WORLD_READABLE 文件可以被其他應(yīng)用程序讀取
MODE_WORLD_WRITABLE 文件可以被其他應(yīng)用程序?qū)懭耄⒁猓渌麘?yīng)用程序?qū)懭霑r(shí)會(huì)覆蓋原有內(nèi)容
當(dāng)讀取與寫入結(jié)束后,我們一定要調(diào)用close方法關(guān)閉流,否則會(huì)導(dǎo)致流一直被占用,造成資源浪費(fèi)!!
3.ExternalStorage
讀、寫SD卡上的文件
1) 調(diào)用Environment的getExternalStorageState().方法判斷手機(jī)是否插入了SD卡并且具有讀寫SD卡的權(quán)限具體如下
2) 調(diào)用Environment的getExternalStorageDirectory()方法來(lái)獲取SD開的目錄
3) 使用FileInputStream、FileOutputStream、FileReader、FileWriter讀寫SD卡中的文件,其方法與讀寫本機(jī)內(nèi)存中的文件方法類似
最后同樣的,一定要記得關(guān)閉IO流
Android集成了一個(gè)輕量級(jí)的數(shù)據(jù)庫(kù)SQLite,Android系統(tǒng)中提供了一個(gè)SQLiteOpenHelper抽象類其中封裝了一些驅(qū)動(dòng),該類用于對(duì)數(shù)據(jù)庫(kù)進(jìn)行處理,該類中有三個(gè)常用方法:
onCreate 數(shù)據(jù)庫(kù)創(chuàng)建時(shí)執(zhí)行(第一次連接獲取數(shù)據(jù)庫(kù)對(duì)象執(zhí)行)
onUpgrate 數(shù)據(jù)庫(kù)版本號(hào)改變時(shí)執(zhí)行
onOpen 數(shù)據(jù)庫(kù)每次打開時(shí)執(zhí)行,在onCreate和onUpgrate 之后執(zhí)行
首先我們要獲得已經(jīng)創(chuàng)建好的SQLiteOpenHelper子類的對(duì)象,接下來(lái)在每一個(gè)函數(shù)中,我們都需要使用xx.getWritableDatabase()方法或者xx.getReadableDatabase()獲得一個(gè)可讀寫或者僅可讀的用于操作數(shù)據(jù)庫(kù)的SQLiteDatabase實(shí)例(其中xx是SQLiteOpenHelper子類的對(duì)象)。并在執(zhí)行SQL語(yǔ)句之前先使用if(xx.isOpen())來(lái)判斷數(shù)據(jù)庫(kù)是否可用(其中xx為獲得的SQLiteDatabase實(shí)例),當(dāng)程序第一次調(diào)用getWritableDatabase()或者getReadableDatabase()方法后,SQLiteOpenHelper會(huì)緩存已經(jīng)獲得SQLiteDatabase實(shí)例,SQLiteDatabase實(shí)例在正常情況下會(huì)維持?jǐn)?shù)據(jù)庫(kù)的打開狀態(tài),一旦緩存,多次調(diào)用getWritableDatabase()或者getReadableDatabase()方法得到的都是同一個(gè)SQLiteDatabase實(shí)例,所以函數(shù)寫完后我們需要使用close方法關(guān)閉數(shù)據(jù)庫(kù)。
唯一一個(gè)特殊的是查詢函數(shù),因?yàn)槲覀儾樵冞^(guò)程中要返回?cái)?shù)據(jù)而單純的SQL語(yǔ)句無(wú)法完成這一點(diǎn),這里就要用到rawQuery函數(shù),這個(gè)函數(shù)返回的是執(zhí)行rawQuery函數(shù)后面()里的SQL語(yǔ)句后的指向第0行的Cursor對(duì)象,我們可以通過(guò)控制這個(gè)Cursor對(duì)象的移動(dòng)來(lái)獲得任意一個(gè)位置的數(shù)據(jù),Cursor提供了如下方法:
Boolean moveToFirst()將指針移到第一行,成功返回true
Boolean moveToLast()將指針移到最后一行,成功返回true
Boolean moveToNext()將指針移到下一行,成功返回true
Boolean moveToPosition(int position)將指針移到指定行,成功返回true
Boolean moveToPrevious()將指針移到上一行,成功返回true
public class XXXSQLiteOpenHelper extends SQLiteOpenHelper {
public XXXSQLiteOpenHelper(Context context) {
super(context, "test12.db", null, 1); //構(gòu)造函數(shù)中初始化
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql="create table test12(_id integer primary key autoincrement,Word,detail);";
db.execSQL(sql);
}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注