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")));
}