使用ContentProvider共享資料

2021-06-03 03:20:56 字數 2385 閱讀 3896

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

當應用需要通過contentprovider對外共享資料時,第一步需要繼承contentprovider並重寫下面方法:

publicclass personcontentproviderextends contentprovider

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

注意:一旦應用繼承了contentprovider類,後面我們就會把這個應用稱為contentprovider(內容提供者)。

package cn.cloud.db;

import cn.cloud.service.dbopenhelper;

import android.content.contentprovider;

import android.content.contenturis;

import android.content.contentvalues;

import android.content.urimatcher;

import android.database.cursor;

import android.database.sqlite.sqlitedatabase;

import android.net.uri;

public class personcontentprovider extends contentprovider

@override

public boolean oncreate()

@override

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

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

break;

default:

throw new illegalargumentexception("unkown uri:"+ uri);

} getcontext().getcontentresolver().notifychange(uri, null);

return num;

} @override

public string gettype(uri uri)

} @override

public uri insert(uri uri, contentvalues values)

} @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("unkown uri:"+ uri);

} }@override

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

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

break;

default:

throw new illegalargumentexception("unkown uri:"+ uri);

} getcontext().getcontentresolver().notifychange(uri, null);//通知資料發生變化

return num;

}}

如何建立自己的contentprovider

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

安卓四大元件之ContentProvider

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

8 四大元件之三 ContentProvider

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