ContentProvider的使用

本文深入解析了Android ContentProvider的工作原理,并提供了实例代码演示如何创建和使用ContentProvider进行数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ContentProvider是通过暴露自己的方法,让其它程序能访问到自己的方法,这样能实现数据之间的传输。

   

public class Provider extends ContentProvider {
private UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
private SQLiteDatabase db = null;
private static final int PERSON = 1;
private static final int STUDENT = 2;
private static final String AUTHORITY = "com.alan.provider";
private DBHelper dbHelper = null;


@Override
public int delete(Uri uri, String whereClause, String[] whereArgs) {
db = dbHelper.getWritableDatabase();
int count = 0;
switch (uriMatcher.match(uri)) {
case PERSON:
count = db.delete("person", whereClause, whereArgs);
break;


default:
throw new IllegalArgumentException("不能识别的URI" + uri);
}
return count;
}


@Override
public String getType(Uri arg0) {
return null;
}


@Override
public Uri insert(Uri uri, ContentValues values) {
db = dbHelper.getWritableDatabase();
switch (uriMatcher.match(uri)) {
case PERSON:
long rowId = db.insert("person", null, values);
if (rowId > 0) {
Uri insertUri = ContentUris.withAppendedId(
Uri.parse("content://" + AUTHORITY + "/vmemor"), rowId);
getContext().getContentResolver().notifyChange(insertUri, null);
return insertUri;
}
default:
throw new IllegalArgumentException("不能识别的URL" + uri);
}
}


@Override
public boolean onCreate() {
dbHelper = new DBHelper(getContext(), 2);
uriMatcher.addURI(AUTHORITY, "person", PERSON);
uriMatcher.addURI(AUTHORITY, "student", STUDENT);
return true;
}


@Override
public Cursor query(Uri uri, String[] arg1, String arg2, String[] arg3,
String arg4) {
db = dbHelper.getReadableDatabase();
switch (uriMatcher.match(uri)) {
case PERSON:
Cursor cursor = db.query("person", arg1, arg2, arg3, null, null,
arg4);
return cursor;
case STUDENT:
System.out.println("student");
return null;
default:
throw new RuntimeException("不能识别的URI" + uri);
}
}


@Override
public int update(Uri uri, ContentValues contentValues, String arg2,
String[] arg3) {
db = dbHelper.getWritableDatabase();
ContentValues values = null;
int count = 0;
if (contentValues == null) {
values = new ContentValues(contentValues);
} else {
values = new ContentValues();
}


switch (uriMatcher.match(uri)) {
case PERSON:
count = db.update("person", values, arg2, arg3);
break;
case STUDENT:
System.out.println("student");
break;
default:
throw new IllegalArgumentException("不能识别的的URI" + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}


}



通过ContentResolver这个类来访问contentprovider暴露的方法

ContentResolver resolver = MainActivity.this.getContentResolver();
Uri uri = Uri.parse("content://com.oracle.sqlite.provider/person");
Cursor cursor = resolver.query(uri, null, "id=?", new String[]{"1"}, null);

while (cursor.moveToNext()) {
System.out.println(cursor.getString(cursor.getColumnIndex("name")));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值