如何新增Content Provider

2021-06-07 07:44:45 字數 1635 閱讀 8924

一、寫在前面

一直很好奇系統是如何通過"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...