android 學習筆記 建立自己的內容提供器

2021-07-04 20:12:39 字數 2567 閱讀 1289

如果想要實現跨程式共享資料的功能,官方推薦的方式就是使用內容提供器,可以通過新建乙個類去繼承contentprovider的方式來建立乙個自己的內容提供器。 

contentprovider類中有六個抽象方法,我們在使用子類繼承它的時候,需要將這六個方法全部重寫。新建myprovider繼承自contentprovider,

**如下所示:

public class myprovider extends contentprovider  

@override

public cursor query(uri uri, string projection, string selection, string selectionargs, string sortorder)

@override

public uri insert(uri uri, contentvalues values)

@override

public int update(uri uri, contentvalues values, string selection, string selectionargs)

@override

public int delete(uri uri, string selection, string selectionargs)

@override

public string gettype(uri uri)

}

1. oncreate() 

初始化內容提供器的時候呼叫。通常會在這裡完成對資料庫的建立和公升級等操作,返回true表示內容提供器初始化成功,返回false則表示失敗。注意,只有當存在 

contentresolver嘗試訪問我們程式中的資料時,內容提供器才會被初始化。 

2. query() 

從內容提供器中查詢資料。使用uri引數來確定查詢哪張表,projection引數用於確 定查詢哪些列,selection和selectionargs引數用於約束查詢哪些行,sortorder引數用於 

對結果進行排序,查詢的結果存放在cursor物件中返回。 

3. insert() 

向內容提供器中新增一條資料。使用uri引數來確定要新增到的表,待新增的資料儲存在values引數中。新增完成後,返回乙個用於表示這條新記錄的uri。 

4. update() 

更新內容提供器中已有的資料。使用uri引數來確定更新哪一張表中的資料,新資料儲存在values引數中,selection和selectionargs引數用於約束更新哪些行,受影響的 

行數將作為返回值返回。 

5. delete() 

從內容提供器中刪除資料。使用uri引數來確定刪除哪一張表中的資料,selection 和selectionargs引數用於約束刪除哪些行,被刪除的行數將作為返回值返回。 

6. gettype() 

根據傳入的內容uri來返回相應的mime型別。可以看到,幾乎每乙個方法都會帶 uri這個引數,這個引數也正是呼叫contentresolver的增刪改查方法時傳遞過來的。而現在,我們需要對傳入的uri引數進行解析,從中分析出呼叫方期望訪問的表和資料。 

public class myprovider extends contentprovider        

public cursor query(uri uri, string projection, string selection, 

string selectionargs, string sortorder)  

…… } 

…… }

可以看到,myprovider 中新增了四個整型常量,其中table1_dir表示訪問table1表 中的所有資料,table1_item表示訪問table1表中的單條資料,table2_dir表示訪問 

able2表中的所有資料,table2_item表示訪問table2表中的單條資料。接著在靜態**塊裡我們建立了urimatcher 的例項,並呼叫adduri()方法,將期望匹配的內容uri格式傳遞進去,注意這裡傳入的路徑引數是可以使用萬用字元的。然後當query()方法被呼叫的時候,就會通過urimatcher 的match()方法對傳入的uri物件進行匹配,如果發現urimatcher 中某個內容uri格式成功匹配了該uri物件,則會返回相應的自定義**,然後我們就可以判斷出呼叫方期望訪問的到底是什麼資料了。上述**只是以query()方法為例做了個示範,其實insert()、update()、delete()這幾個方法的實現也是差不多的,它們都會攜帶uri這個引數,然後同樣利用urimatcher 的match() 方法判斷出呼叫方期望訪問的是哪張表,再對該表中的資料進行相應的操作就可以了。除此之外,還有乙個方法你會比較陌生,即gettype()方法。它是所有的內容提供器都必須提供的乙個方法,用於獲取uri物件所對應的mime型別。乙個內容uri所對應的mime 字串主要由三部分組分,android對這三個部分做了如下格式規定。 

public class myprovider extends contentprovider  

return null;

} }

Android學習筆記

android系列 第一期 第一課 android初步認識 今天我們來初步了解一下安卓吧。首先,說到android,大家都非常熟悉了,相信都用過android手機吧,android給我們的第一印象應該是它的logo 乙個小機械人,如下圖1所示。圖1 android logo 嗯,好,認識了andro...

Android學習筆記

1 android四大天王 1 activity 介面元件,使用者介面,整個應用程式的門面 2 intent 用於應用之間傳輸資料 3 service 承擔資料處理的工作 4 content provider 為應用提供資料 android檔案目錄 1 assets 2 res drawable 放...

android學習筆記

我是自學android的到現在也有一段時間了,大概三個月。我不是大牛,沒有很牛掰的技術,寫此部落格純粹是為了把我的錯誤記錄下來,印象深刻點,保證下次不會再犯,或許對別人也能有點用吧!以下是今天做的零零散散的筆記 adapter set nullpointerexception 在給某個元件設定值的時...