Android數(shù)據(jù)存儲(chǔ)
Android提供了5種方式存儲(chǔ)數(shù)據(jù)
- SharedPreferences
- 它是Android提供的用來(lái)存儲(chǔ)一些簡(jiǎn)單配置信息的一種機(jī)制底瓣,采用了XML格式將數(shù)據(jù)存儲(chǔ)到設(shè)備中感凤。只能在同一個(gè)包內(nèi)使用凹联,不能在不同的包之間使用
- File
- 文件存儲(chǔ)方式是一種較常用的方法揭鳞,在Android中讀取/寫入文件的方法谢谦,與Java中實(shí)現(xiàn)I/O的程序是完全一樣的蚕脏,提供了openFileInput()和openFileOutput()方法來(lái)讀取設(shè)備上的文件
- SQLite
- SQLite是Android所帶的一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)具钥,它支持SQL語(yǔ)句,它是一個(gè)輕量級(jí)的
- ContentProvider
- 網(wǎng)絡(luò)
使用SharedPreferences存儲(chǔ)數(shù)據(jù)
適用范圍:保存少量的數(shù)據(jù)驯用,且這些數(shù)據(jù)的格式非常簡(jiǎn)單:字符串型脸秽、基本類型的值。比如應(yīng)用程序的各種配置信息(如是否打開(kāi)音效蝴乔、是否使用震動(dòng)效果记餐、小游戲的玩家積分等),解鎖口 令密碼等
核心原理:保存基于XML文件存儲(chǔ)的key-value鍵值對(duì)數(shù)據(jù)薇正,通常用來(lái)存儲(chǔ)一些簡(jiǎn)單的配置信息片酝。通過(guò)DDMS的File Explorer面板,展開(kāi)文件瀏覽樹(shù),很明顯SharedPreferences數(shù)據(jù)總是存儲(chǔ)在/data/data/<package name>/shared_prefs目錄下挖腰。SharedPreferences對(duì)象本身只能獲取數(shù)據(jù)而不支持存儲(chǔ)和修改,存儲(chǔ)修改是通過(guò)SharedPreferences.edit()獲取的內(nèi)部接口Editor對(duì)象實(shí)現(xiàn)雕沿。 SharedPreferences本身是一 個(gè)接口,程序無(wú)法直接創(chuàng)建SharedPreferences實(shí)例猴仑,只能通過(guò)Context提供的getSharedPreferences(String name, int mode)方法來(lái)獲取SharedPreferences實(shí)例审轮,該方法中name表示要操作的xml文件名,第二個(gè)參數(shù)具體如下:
- Context.MODE_PRIVATE: 指定該SharedPreferences數(shù)據(jù)只能被本應(yīng)用程序讀辽俗、寫疾渣。
- Context.MODE_WORLD_READABLE: 指定該SharedPreferences數(shù)據(jù)能被其他應(yīng)用程序讀,但不能寫榆苞。
- Context.MODE_WORLD_WRITEABLE: 指定該SharedPreferences數(shù)據(jù)能被其他應(yīng)用程序讀稳衬,寫
Editor有如下主要重要方法:
- SharedPreferences.Editor clear():清空SharedPreferences里所有數(shù)據(jù)
- SharedPreferences.Editor putXxx(String key , xxx value): 向SharedPreferences存入指定key對(duì)應(yīng)的數(shù)據(jù),其中xxx 可以是boolean,float,int等各種基本類型據(jù)
- SharedPreferences.Editor remove(): 刪除SharedPreferences中指定key對(duì)應(yīng)的數(shù)據(jù)項(xiàng)
- boolean commit(): 當(dāng)Editor編輯完成后坐漏,使用該方法提交修改
SharedPreferences對(duì)象與SQLite數(shù)據(jù)庫(kù)相比薄疚,免去了創(chuàng)建數(shù)據(jù)庫(kù),創(chuàng)建表赊琳,寫SQL語(yǔ)句等諸多操作街夭,相對(duì)而言更加方便,簡(jiǎn)潔躏筏。但是SharedPreferences也有其自身缺陷板丽,比如其職能存儲(chǔ)boolean,int趁尼,float埃碱,long和String五種簡(jiǎn)單的數(shù)據(jù)類型,比如其無(wú)法進(jìn)行條件查詢等酥泞。所以不論SharedPreferences的數(shù)據(jù)存儲(chǔ)操作是如何簡(jiǎn)單砚殿,它也只能是存儲(chǔ)方式的一種補(bǔ)充,而無(wú)法完全替代如SQLite數(shù)據(jù)庫(kù)這樣的其他數(shù)據(jù)存儲(chǔ)方式芝囤。
File文件存儲(chǔ)數(shù)據(jù)
核心原理: Context提供了兩個(gè)方法來(lái)打開(kāi)數(shù)據(jù)文件里的文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),這兩個(gè)方法第一個(gè)參數(shù) 用于指定文件名似炎,第二個(gè)參數(shù)指定打開(kāi)文件的模式辛萍。具體有以下值可選:
MODE_PRIVATE:為默認(rèn)操作模式,代表該文件是私有數(shù)據(jù)羡藐,只能被應(yīng)用本身訪問(wèn)贩毕,在該模式下,寫入的內(nèi)容會(huì)覆蓋原文件的內(nèi)容仆嗦,如果想把新寫入的內(nèi)容追加到原文件中辉阶。可 以使用Context.MODE_APPEND
MODE_APPEND:模式會(huì)檢查文件是否存在欧啤,存在就往文件追加內(nèi)容睛藻,否則就創(chuàng)建新文件启上。
MODE_WORLD_READABLE:表示當(dāng)前文件可以被其他應(yīng)用讀刃纤怼;
MODE_WORLD_WRITEABLE:表示當(dāng)前文件可以被其他應(yīng)用寫入冈在。
除此之外倒慧,Context還提供了如下幾個(gè)重要的方法:
- getDir(String name , int mode):在應(yīng)用程序的數(shù)據(jù)文件夾下獲取或者創(chuàng)建name對(duì)應(yīng)的子目錄
- File getFilesDir():獲取該應(yīng)用程序的數(shù)據(jù)文件夾得絕對(duì)路徑
- String[] fileList():返回該應(yīng)用數(shù)據(jù)文件夾的全部文件
SQLite存儲(chǔ)數(shù)據(jù)
SQLite是輕量級(jí)嵌入式數(shù)據(jù)庫(kù)引擎,它支持 SQL 語(yǔ)言包券,并且只利用很少的內(nèi)存就有很好的性能∪伊拢現(xiàn)在的主流移動(dòng)設(shè)備像Android、iPhone等都使用SQLite作為復(fù)雜數(shù)據(jù)的存儲(chǔ)引擎溅固,在我們?yōu)橐苿?dòng)設(shè)備開(kāi)發(fā)應(yīng)用程序時(shí)付秕,也許就要使用到SQLite來(lái)存儲(chǔ)我們大量的數(shù)據(jù),所以我們就需要掌握移動(dòng)設(shè)備上的SQLite開(kāi)發(fā)技巧
SQLiteDatabase類為我們提供了很多種方法侍郭,上面的代碼中基本上囊括了大部分的數(shù)據(jù)庫(kù)操作询吴;對(duì)于添加、更新和刪除來(lái)說(shuō)亮元,我們都可以使用
db.executeSQL(String sql);
db.executeSQL(String sql, Object[] bindArgs);//sql語(yǔ)句中使用占位符猛计,然后第二個(gè)參數(shù)是實(shí)際的參數(shù)集
db.insert(String table, String nullColumnHack, ContentValues values);
db.update(String table, Contentvalues values, String whereClause, String whereArgs);
db.delete(String table, String whereClause, String whereArgs);