Android???????????????Content Provider
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android???????????????Content Provider相关的知识,希望对你有一定的参考价值。
??????????????? style ?????? http path ?????? boolean value ada
Content Provider
ContentProvider???android???????????????????????????????????????????????????????????????ContentProvider???????????????????????????????????????????????????????????????????????????ContentProvider??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Context.MODE_WORLD_READABLE???Context.MODE_WORLD_WRITEABLE??????????????????????????????????????????????????????????????????ContentProvider????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????xml???????????????????????????????????????xml?????????????????????????????????sharedpreferences???????????????????????????sharedpreferences API???????????????
??????ContentProvider???????????????????????????????????????????????????????????????
?????????????????????ContentProvider?????????????????????????????????????????????ContentProvider????????????????????????
public class PersonContentProvider extends ContentProvider{
public boolean onCreate()
public Uri insert(Uri uri, ContentValues values)
public int delete(Uri uri, String selection, String[] selectionArgs)
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
public String getType(Uri uri)
}
??????????????????AndroidManifest.xml??????<provider>??????ContentProvider????????????????????????????????????????????????ContentProvider ???ContentProvider?????????authorities????????????/????????????????????????????????????????????????ContentProvider??????????????????????????????????????????????????????????????????authorities ?????????????????????
<manifest.... >
<application android:icon="@drawable/icon" android:label="@string/app_name">
<provider android:name=".PersonContentProvider"
android:authorities="com.ljq.providers.personprovider"/>
</application>
</manifest>
??????Uri??????
Uri??????????????????????????????Uri?????????????????????????????????1??????????????????ContentProvider ???2??????ContentProvider???????????????????????????????????????Uri???????????????????????????
ContentProvider????????????????????????scheme?????????Android???????????? scheme??????content://
??????????????????Authority???????????????????????????ContentProvider?????????????????????????????????????????????????????????
?????????path?????????????????????????????????????????????????????????????????????????????????????????????:
?????????person??????id???10???????????????????????????????????????:/person/10
?????????person??????id???10????????????name????????? person/10/name
?????????person???????????????????????????????????????????????????:/person
?????????xxx?????????????????????????????????????????????:/xxx
????????????????????????????????????????????????????????????????????????xml???????????????????????????????????????:
?????????xml?????????person????????????name???????????????????????????????????????/person/name
????????????????????????????????????Uri???????????????Uri?????????parse()??????????????????
Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person")
??????UriMatcher???????????????
??????Uri????????????????????????????????????????????????????????????Uri?????????Uri??????????????????Android?????????????????????????????????Uri????????????????????????UriMatcher???ContentUris ????????????????????????????????????????????????????????????
UriMatcher???????????????Uri????????????????????????
?????????????????????????????????Uri????????????????????????????????????
//??????UriMatcher.NO_MATCH???????????????????????????????????????
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//??????match()????????????content://com.ljq.provider.personprovider/person???????????????????????????1
sMatcher.addURI("com.ljq.provider.personprovider", "person", 1);//??????????????????uri????????????????????????????????????
//??????match()????????????content://com.ljq.provider.personprovider/person/230???????????????????????????2
sMatcher.addURI("com.ljq.provider.personprovider", "person/#", 2);//#???????????????
switch (sMatcher.match(Uri.parse("content://com.ljq.provider.personprovider/person/10"))) {
case 1
break;
case 2
break;
default://?????????
break;
}
????????????????????????Uri?????????????????????sMatcher.match(uri)??????????????????Uri??????????????????????????????????????????????????????????????????addURI()?????????????????????????????????????????????content://com.ljq.provider.personprovider/person??????????????????????????????1
??????ContentUris???????????????
ContentUris???????????????Uri???????????????ID?????????????????????????????????????????????
withAppendedId(uri, id)?????????????????????ID?????????
Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person")
Uri resultUri = ContentUris.withAppendedId(uri, 10);
//????????????Uri??????content://com.ljq.provider.personprovider/person/10
parseId(uri)??????????????????????????????ID?????????
Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person/10")
long personid = ContentUris.parseId(uri);//??????????????????:10
????????????ContentProvider????????????
ContentProvider???????????????????????????
public boolean onCreate()???????????????ContentProvider???????????????????????????Android????????????ContentProvider??????????????????????????????????????????????????????
public Uri insert(Uri uri, ContentValues values)????????????????????????????????????ContentProvider???????????????
public int delete(Uri uri, String selection, String[] selectionArgs)????????????????????????????????????ContentProvider???????????????
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)???????????????????????????????????????ContentProvider???????????????
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)????????????????????????????????????ContentProvider??????????????????
public String getType(Uri uri)??????????????????????????????Url??????????????????MIME?????????
????????????????????????????????????????????????MIME????????????????????????vnd.android.cursor.dir/?????????
????????????????????????person?????????Uri???content://com.ljq.provider.personprovider/person??????????????????MIME???????????????????????????"vnd.android.cursor.dir/person"???
????????????????????????????????????????????????????????????MIME????????????????????????vnd.android.cursor.item/?????????
???????????????id???10???person?????????Uri???content://com.ljq.provider.personprovider/person/10??????????????????MIME?????????????????????"vnd.android.cursor.item/person"???
????????????ContentResolver??????ContentProvider????????????
????????????????????????ContentProvider???????????????????????????????????????????????????????????????????????????ContentResolver ????????????????????????ContentResolver ?????????????????????Activity?????????getContentResolver()????????? ContentResolver ???????????????ContentProvider?????????????????????????????????
public Uri insert(Uri uri, ContentValues values)?????????????????????ContentProvider???????????????
public int delete(Uri uri, String selection, String[] selectionArgs)?????????????????????ContentProvider???????????????
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)????????????????????????ContentProvider???????????????
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)?????????????????????ContentProvider??????????????????
?????????????????????????????????Uri?????????????????????ContentProvider??????????????????????????????????????????
?????????????????????Uri.parse("content://com.ljq.providers.personprovider/person/10")??????????????????????????????com.ljq.providers.personprovider???ContentProvider?????????????????????????????????person??????id???10????????????
??????ContentResolver???ContentProvider????????????????????????????????????????????????????????????
ContentResolver resolver = getContentResolver();
Uri uri = Uri.parse("content://com.ljq.provider.personprovider/person");
//??????????????????
ContentValues values = new ContentValues();
values.put("name", "linjiqin");
values.put("age", 25);
resolver.insert(uri, values);
//??????person??????????????????
Cursor cursor = resolver.query(uri, null, null, null, "personid desc");
while(cursor.moveToNext()){
Log.i("ContentTest", "personid="+ cursor.getInt(0)+ ",name="+ cursor.getString(1));
}
//???id???1????????????name?????????????????????zhangsan
ContentValues updateValues = new ContentValues();
updateValues.put("name", "zhangsan");
Uri updateIdUri = ContentUris.withAppendedId(uri, 2);
resolver.update(updateIdUri, updateValues, null, null);
//??????id???2?????????
Uri deleteIdUri = ContentUris.withAppendedId(uri, 2);
resolver.delete(deleteIdUri, null, null);
????????????ContentProvider??????????????????
??????ContentProvider????????????????????????ContentProvider????????????????????????????????????ContentProvider???????????????????????????getContentResolver().notifyChange(uri, null)?????????????????????URI?????????????????????????????????
public class PersonContentProvider extends ContentProvider {
public Uri insert(Uri uri, ContentValues values) {
db.insert("person", "personid", values);
getContext().getContentResolver().notifyChange(uri, null);
}
}
??????ContentProvider?????????????????????????????????????????????????????????ContentObserver????????????????????????uri??????????????????????????????????????????????????????????????????????????????ContentObserver???onChange()?????????
getContentResolver().registerContentObserver(Uri.parse("content://com.ljq.providers.personprovider/person"),true, new PersonObserver(new Handler()));
public class PersonObserver extends ContentObserver{
public PersonObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) {
//???????????????????????????????????????
}
}
以上是关于Android???????????????Content Provider的主要内容,如果未能解决你的问题,请参考以下文章