安卓的數(shù)據(jù)存儲分為五大類:SharedPreferences存儲、文件存儲(內(nèi)部存儲、外部SD卡存儲)、SQLite數(shù)據(jù)顯卡存儲、 ContentProvider 、網(wǎng)絡(luò)存儲。
SharedPreferences:它是Android提供的用來存儲一些簡單的配置信息的一種機(jī)制,采用XML格式將數(shù)據(jù)存儲到設(shè)備中,常應(yīng)用于存儲程序的各種配置信息,如用戶名、密碼。可應(yīng)用于登陸的記住密碼。
SQLite數(shù)據(jù)庫:是Android自帶的一個(gè)輕量級數(shù)據(jù)庫。
文件存儲:主要就是Java的IO流操作,不過要注意權(quán)限的設(shè)置。
最近寫了一個(gè)安卓作業(yè),要實(shí)現(xiàn)添加聯(lián)系人刪除聯(lián)系人查找聯(lián)系人并進(jìn)行SQLite數(shù)據(jù)庫操作。
中途踩到了些許坑:
1.數(shù)據(jù)庫中id是自動增長的,而且id一旦創(chuàng)建是不會改變的,這就導(dǎo)致在刪除操作時(shí)出現(xiàn)點(diǎn)擊獲取的動態(tài)id無法匹配數(shù)據(jù)庫中靜態(tài)的id以至于從數(shù)據(jù)庫刪除數(shù)據(jù)失敗。
2.本人喜歡自定義設(shè)計(jì)界面分布及色調(diào),但在自定義對話框時(shí),由于對話框最后調(diào)用了dismiss()方法銷毀視圖,導(dǎo)致獲取的數(shù)據(jù)傳過去主界面就變成了null數(shù)據(jù)。
更新坑點(diǎn):3.這個(gè)坑點(diǎn)是等我寫完文章的第二天才測試到的。。。就是在刪除完數(shù)據(jù)之后再繼續(xù)添加聯(lián)系人的話數(shù)據(jù)的id是自動增長的,就意味著原來數(shù)據(jù)庫里有3條數(shù)據(jù),然后刪除id為2的數(shù)據(jù),此時(shí)數(shù)據(jù)庫id修改為1,2,但我再插入一條數(shù)據(jù)時(shí)由于id是自動增長的,所以此時(shí)插入的數(shù)據(jù)id就變成4了。。。
亮點(diǎn):程序?qū)崿F(xiàn)了第一次登陸之后的每次登陸都自動訪問數(shù)據(jù)庫顯示之前存儲的聯(lián)系人信息。
接下來直接開始一步步實(shí)現(xiàn)功能了,首先創(chuàng)建一個(gè)數(shù)據(jù)庫類。

針對第一個(gè)坑我采用此解決方案:當(dāng)開始刪除數(shù)據(jù)庫數(shù)據(jù)時(shí),把id大于當(dāng)前刪除數(shù)據(jù)的id都update往上移。

針對第二個(gè)坑我采用此解決方案:要在主界面獲取對話框的數(shù)據(jù)的話,我直接在對話框獲取數(shù)據(jù)后一并插入SQLite數(shù)據(jù)庫,這樣主界面就可以直接從數(shù)據(jù)庫中讀取數(shù)據(jù)了,也就解決了對話框一旦銷毀掉數(shù)據(jù)在內(nèi)存中也跟著銷毀的問題了。

針對第三個(gè)坑我采用此解決方案:在插入的時(shí)候手動插入id,即雖然id一開始是自動增長的,但之后插入的時(shí)候我都手動插入id的值。


查找聯(lián)系人功能本想著還是在主界面彈出自定義對話框,但寫了1小時(shí)了還是不太明白在dismiss銷毀對話框之間如何獲取到信息,所以最后采用了同學(xué)了其他做法,直接在主界面設(shè)置個(gè)對話框,通過setView()方法把布局文件設(shè)置進(jìn)去,此時(shí)對于布局界面的按鈕就無法靈活定義樣式了。不過此時(shí)需要用到打氣筒inflate的方式加載布局文件并生成View對象,多用于ListView

PS:網(wǎng)上提供的三種使用打氣筒方法

使用ListView顯示數(shù)據(jù)的步驟為:1.創(chuàng)建一個(gè)適配器存儲數(shù)據(jù);2.把適配器通過ListView的setAdapter()方法添加進(jìn)去,如下:

此處介紹菜單的使用:
選項(xiàng)菜單:

上下文菜單:注意要為上下文菜單注冊監(jiān)聽哪個(gè)控件響應(yīng)。代碼為:registerForContextMenu(list);

Tip:最后程序運(yùn)行效果圖如下:



哈哈,如有寫錯請?zhí)岢?,這對還是新手的我大有幫助。上面值得優(yōu)化得地方有用戶體驗(yàn)和創(chuàng)建數(shù)據(jù)庫連接時(shí)不能寫死兩點(diǎn)沒做好。
代碼放在我的碼云上,鏈接為:https://gitee.com/jxb_770411142/codes/iqu6a97p3rjnl8wdgo1bx100