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的主要内容,如果未能解决你的问题,请参考以下文章

带有win32con的Python滚轮鼠标

Android HttpUrlConnection如何在请求头中设置cookie?

Android初学第73天

Android 关于软键盘

Android之 服务

关于Cordova Android