一、寫在前面
一直很好奇系統是如何通過"content:"來訪問歸屬地資料庫的,通過研究**和api參考文件以及網路上的資料基本上弄明白了,於是有了以下的內容。
二、android content provider介紹
三、content provider的組成
四、新增content provider
建立資料儲存
理論上講,我們可以以任何形式來儲存資料,比如二進位制檔案、xml或者sqlite資料庫。
在android系統中sqlite是首選,因為sqlite設計初衷就是應用於嵌入式等平台的輕量級文字資料庫,它具備大多數關聯式資料庫所具備的功能。
如果要使用sqlite資料庫,android sdk提供了android.database.sqlite.sqliteopenhelper工具類,使用sqliteopenhelper可以很方便地建立和更新sqlite資料庫。
public class autoinfoprovider extends sqliteopenhelper
/*當資料庫被建立是被呼叫,可以在這裡執行一些資料庫初始化的操作,比如建立各個表以及匯入初始資料等
*/@override
public void oncreate(sqlitedatabase db)
/*當資料庫需要公升級版本的時候呼叫
*/@override
public void onupgrade(sqlitedatabase db, int oldversion, int newversion)
}
這樣我們可以用demosqliteopenhelper來開啟資料庫檔案,並且在第一次開啟的時候可以對資料庫進行建立和初始化。
實現contentprovider介面
android.content.contentprovider嚴格來說是乙個抽象類,我們需要通過繼承它來實現自己的content provider。有以下方法需要實現:
oncreate() 當content provider初始化時呼叫
query(uri, string, string, string, string) 用於查詢資料,返回乙個cursor
insert(uri, contentvalues) 插入資料
update(uri, contentvalues, string, string) 更新資料
delete(uri, string, string) 刪除資料
gettype(uri) 返回資料的mime型別
" insert、update、delete等方法需要考慮執行緒同步的問題,因為有可能多個執行緒同時條用這些方法來修改資料庫,而sqlite是不支援多執行緒同時寫入的。"
在androidmanifest.xml宣告新建的provider
我們必須在androidmanifest.xml裡面宣告provider,否則是該provider是無法被訪問使用的!
執行在單獨程序中的ContentProvider
contentprovider既可以與呼叫方處在同一程序,也可以執行在單獨程序中,完全取決於contentprovider所處的aplication的程序資訊。因此假如contentprovider執行在單獨的程序中,那麼呼叫contentprovider將會涉及到ipc通訊。既然涉及到ipc通訊,...
執行在單獨程序中的ContentProvider
contentprovider既可以與呼叫方處在同一程序,也可以執行在單獨程序中,完全取決於contentprovider所處的aplication的程序資訊。因此假如contentprovider執行在單獨的程序中,那麼呼叫contentprovider將會涉及到ipc通訊。既然涉及到ipc通訊,...
mysql如何新增語句的 sql如何新增語句
新建乙個sql,建立乙個表 use demo create table seckill seckill id bigint not null auto increment comment 商品庫存id name varchar 120 not null comment 商品名稱 number int...