使用ContentProvider共享資料

2021-06-02 09:52:06 字數 3114 閱讀 2970

當應用繼承contentprovider類,並重寫該類用於提供資料和儲存資料的方法,就可以向其他應用共享其資料。以前我們學習過檔案的操作模式,通過指定檔案的操作模式為context.mode_world_readable 或context.mode_world_writeable同樣可以對外共享資料,但資料的訪問方式會因資料儲存的方式而不同,如:採用xml檔案對外共享資料,需要進行xml解析來讀寫資料;採用sharedpreferences共享資料,需要使用sharedpreferences api讀寫資料。而使用contentprovider共享資料的好處是統一了資料訪問方式。

當應用需要通過contentprovider對外共享資料時:

第一步需要繼承contentprovider並重寫下面方法:

public class personcontentprovider extends contentprovider

第二步需要在androidmanifest.xml使用對該contentprovider進行配置,為了能讓其他應用找到該contentprovider , contentprovider 採用了authorities(主機名/網域名稱)對它進行唯一標識,你可以把 contentprovider看作是乙個**(想想,**也是提供資料者),authorities 就是他的網域名稱:

urimatcher類使用介紹

因為uri代表了要操作的資料,所以我們經常需要解析uri,並從uri中獲取資料。android系統提供了兩個用於操作uri的工具類,分別為urimatcher 和contenturis 。掌握它們的使用,會便於我們的開發工作。

urimatcher類用於匹配uri,它的用法如下:

首先第一步把你需要匹配uri路徑全部給註冊上,如下:

//常量urimatcher.no_match表示不匹配任何路徑的返回碼

urimatcher  smatcher = new urimatcher(urimatcher.no_match);

//如果match()方法匹配content:路徑,返回匹配碼為1

smatcher.adduri(「cn.itcast.provider.personprovider」, 「person」, 1);//新增需要匹配uri,如果匹配就會返回匹配碼,其中第乙個引數為主機名

//如果match()方法匹配content:/230路徑,返回匹配碼為2

smatcher.adduri(「cn.itcast.provider.personprovider」, 「person/#」, 2);//#號為萬用字元

switch (smatcher.match(uri.parse("content:/10"

)))

註冊完需要匹配的uri後,就可以使用smatcher.match(uri)方法對輸入的uri進行匹配,如果匹配就返回匹配碼,匹配碼是呼叫adduri()方法傳入的第三個引數,假設匹配content:路徑,返回的匹配碼為1

contenturis類使用介紹

contenturis類用於獲取uri路徑後面的id部分,它有兩個比較實用的方法:

uri uri = uri.parse("content:")

//生成後的uri為:content:/10

parseid(uri)方法用於從路徑中獲取id部分:

uri uri = uri.parse("content:/10")

long personid = contenturis.parseid(uri);//獲取的結果為:10

下面是乙個範例,必須寫在應用的同乙個包裡或者其子包裡:

public class personprovider extends contentprovider  

//刪除person表中的所有記錄   /person

//刪除person表中指定id的記錄 /person/10

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

count = db.delete("person", where, selectionargs);

return count;

default:

throw new illegalargumentexception("unkwon uri:"+ uri.tostring());}}

@override

public string gettype(uri uri)

}default:

throw new illegalargumentexception("unkwon uri:"+ uri.tostring());}}

@override

public boolean oncreate()

//查詢person表中的所有記錄   /person

//查詢person表中指定id的記錄 /person/10

@override

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

string selectionargs, string sortorder)

return db.query("person", projection, where, selectionargs, null, null, sortorder);

default:

throw new illegalargumentexception("unkwon uri:"+ uri.tostring());}}

//更新person表中的所有記錄   /person

//更新person表中指定id的記錄 /person/10

@override

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

count = db.update("person", values, where, selectionargs);

return count;

default:

throw new illegalargumentexception("unkwon uri:"+ uri.tostring());}}

如何建立自己的contentprovider

如何建立自己的contentprovider 作為androidl四大元件 compenent activity,service,breadcasereceiver,contentprovider 之一的content provider,為其它應用程式 也可以是提供該 content provide...

安卓四大元件之ContentProvider

contentprovider是內容提供者 為什麼要有內容提供者?因為在安卓中每乙個應用的資料庫檔案都是私有的,自能在自己的應用中自己使用,別的應用要是想訪問,那麼就需要修改檔案的許可權,這樣資料就變的不安全了,所以就引入了內容提供者。首先來說一下內容提供者中的乙個重要的類uri,熟悉uri會使我們...

8 四大元件之三 ContentProvider

課程目標 理解contentprovider的作用及好處 認清contentprovider與資料儲存的關係 掌握contentprovider對外提供的資料模型形式 能夠編寫contentresolver的增刪改查 能夠自定義乙個contentprovider 能夠提供程序間訪問 了解conten...