android的content provider问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android的content provider问题相关的知识,希望对你有一定的参考价值。
在使用ContentProvider的数据库的时候,发现它是一个封装好的操作
现在我的数据库文件比较麻烦,含有大量的汉字
要是进入app后进行数据库和表的创建的话太耗时了
所以我想直接读取写好的数据库
但是我发现它是会读取默认路径下的:
/data/data/包名/databases/里面的数据库
我需要的是读取指定路径比如/mnt/sdcard/下的数据库
可是没有发现有相关Content Provider进行指定路径数据库的读取方法
还希望告知一二!
这个有点问题
在继承了ContentProvider以后,按照SDK的说法,自己写一个静态类
DatabaseHelper extends SQLiteOpenHelper
这个里面有一个onCreate方法是这样的
public void onCreate(SQLiteDatabase db)
将会在Activity oncreate时就操作数据库
直接传输的db对象,我就是找不到它在哪能修改这个db对象
您那个方法自己新建的数据库操作类OK,
但是在使用ContentProvider以后据我的理解应该是有区别的
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问题的主要内容,如果未能解决你的问题,请参考以下文章
Android???????????????Content Provider