Android的ContentProvider(三)

自定义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。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值