自定义ContentProvider后,接下来是对它的使用,我们还是在Activity中使用它。
首先是新增:
ContentValues cv = new ContentValues();
cv.put(Book.Columns.NAME, name);
cv.put(Book.Columns.AUTHOR, author);
Uri insertedUri = getContentResolver().insert(Book.CONTENT_URI,
cv);
String rowIdStr = insertedUri.getPathSegments().get(1);
新增方法返回的是Uri,通过解析此Uri,可以得到新增的图书的ID号。
查询方法使用CursorLoader:
String[] projection = new String[] { Book.Columns._ID,
Book.Columns.NAME, Book.Columns.AUTHOR,
Book.Columns.CREATE_TIME };
CursorLoader cursorLoader = new CursorLoader(this, Book.CONTENT_URI,
projection, null, null, null);
Cursor cur = cursorLoader.loadInBackground();
if (cur.moveToFirst()) {
do {
Long id = cur.getLong(cur.getColumnIndex(Book.Columns._ID));
String name = cur.getString(cur
.getColumnIndex(Book.Columns.NAME));
String author = cur.getString(cur
.getColumnIndex(Book.Columns.AUTHOR));
String createTimeStr = cur.getString(cur
.getColumnIndex(Book.Columns.CREATE_TIME));
SimpleDateFormat format = new SimpleDateFormat("MM/dd HH:mm",
Locale.getDefault());
String createTime = format.format(new Date(Long
.parseLong(createTimeStr)));
createRow(id, name, author, createTime);
} while (cur.moveToNext());
}
我们说了,projection是指查询结果中要返回哪些列,查询后即调用loadInBackground获取游标,然后迭代游标获取数据。
删除代码也较为简单:
getContentResolver().delete(
Book.CONTENT_URI,
Book.Columns._ID.concat(" in (".concat(deleteIds)
.concat(") ")), null);
update就不再描述了。
你会注意到,在使用过程中我们没有调用BookProvider,而是直接使用了ContentResolver的相关方法,事实上因为在AndroidManifest.xml中注册了Provider,所以在Activity中使用的,即是自定义的Provider。