ContentProvider-創(chuàng)新互聯(lián)

ContentProvider內(nèi)容提供者 ContentProvider

Android是基于Linux系統(tǒng),每個(gè)用戶有獨(dú)立的進(jìn)程,這些進(jìn)程之間是不能互相訪問(wèn)的,如果有需要在各個(gè)用戶之間共享數(shù)據(jù),我們需要使用CotentProivder實(shí)現(xiàn)。另外,ContentProvider可以提供一個(gè)統(tǒng)一的接口使上層調(diào)用者不用關(guān)心數(shù)據(jù)存儲(chǔ)的細(xì)節(jié)問(wèn)題。

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的高坪網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

URI
content:// com.anjoyo.myfirstprovider/mitt/12
----A-----|-----------B--------------|--C--|D
A.標(biāo)準(zhǔn)前綴表明這個(gè)數(shù)據(jù)被一個(gè)內(nèi)容提供器所控制。
B.URI的權(quán)限部分;它標(biāo)識(shí)這個(gè)內(nèi)容提供器。對(duì)于第三方應(yīng)用程序,這應(yīng)該是一個(gè)全稱類名以確保唯一性。權(quán)限在<provider>元素的權(quán)限屬性中進(jìn)行聲明:

<providerandroid:name=".MyContentProvider"
    android:authorities="com.anjoyo.myfirstprovider"/>

C.用來(lái)判斷請(qǐng)求數(shù)據(jù)類型的路徑。這可以是0或多個(gè)段長(zhǎng)。這個(gè)分段可以沒(méi)有。
D.被請(qǐng)求的特定記錄的ID,如果有的話。這是被請(qǐng)求記錄的_ID數(shù)值。如果這個(gè)請(qǐng)求不局限于單個(gè)記錄, 這個(gè)分段和尾部的斜線會(huì)被忽略。

-----------
每一個(gè)ContentProvider都擁有一個(gè)公共的URI,這個(gè)URI用于表示這個(gè)ContentProvider所提供的數(shù)據(jù)。
Android所提供的ContentProvider都存放在android.provider包當(dāng)中。

-----------
ContentProvider的函數(shù)
query() 查詢
insert() 插入
update() 更新
delete() 刪除
getType() 得到數(shù)據(jù)類型
onCreate() 創(chuàng)建時(shí)的回調(diào)函數(shù)
------------
實(shí)現(xiàn)ContentProvider過(guò)程
1.定義一個(gè)類,繼承ContentProvider
2.定義一個(gè)CONTENT_URI常量
3.實(shí)現(xiàn)query,insert,update,delete,getType和onCreate方法
4.在AndroidManifest.xml中聲明

---------------
Uri insertedUri = ContentUris.withAppendedId(uri, rowId);
重新構(gòu)建一個(gè)URI對(duì)象,如果uri是content://contacts/people,
rowId是45。重新構(gòu)建的URI是content://contacts/people/45
getContext().getContentResolver().notifyChange(insertedUri, null);
notifyChange()方法則用來(lái)通知注冊(cè)在此URI上的觀察者(observer)數(shù)據(jù)發(fā)生了改變。最后返回刪除或修改數(shù)據(jù)的行數(shù)。

ContentUris是Uri的工具類。其主要方法有:
1):把id拼接到Uri上,然后生成新的Uri
Uri insertUri = ContentUris.withAppendedId(uri,id);
2)解析Uri的id部分
long id = ContentUris.parseId(uri);

另外:uri有個(gè)方法是getPathSegments()是獲取uri的每一部分,返回值是List<String>

List<String> list = uri.getPathSegments();
System.out.println(list);
String idstr = list.get(list.size()-1);
long id = Long.parseLong(idstr);
//等價(jià)于下邊代碼
long id = ContentUris.parseId(uri);

-------------------------

如何訪問(wèn)ContentProvider?
step1.獲取ContentResolver對(duì)象
ContentResolver cr = mContent.getContentResolver();
Cursor c = cr.query(Uri,...);
Uri insertedUri = cr.insert(Uri,...);
...

SqliteQueryBuilder使用。它是在查詢時(shí)候,可以靈活添加查詢條件。不能執(zhí)行添加更新等操作。

@Override
public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {
    SQLiteQueryBuilder builder= new SQLiteQueryBuilder();
switch (uriMatcher.match(uri)) {
case PERSONS:
        builder.setTables("mitt_tb");
break;
case PERSON:
        builder.setTables("mitt_tb");
long id = ContentUris.parseId(uri);
//添加查詢條件        builder.appendWhere("id="+id);
break;
    }
    SQLiteDatabase db= helper.getReadableDatabase();
    Cursor c= builder.query(db, projection, selection, selectionArgs, null, null, sortOrder);
return c;
}

文章名稱:ContentProvider-創(chuàng)新互聯(lián)
標(biāo)題來(lái)源:http://muchs.cn/article22/csjecc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)靜態(tài)網(wǎng)站、App開(kāi)發(fā)、企業(yè)建站、微信公眾號(hào)、網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)