首页 > 代码库 > 数据库的异步查询-----AsyncQueryHandler

数据库的异步查询-----AsyncQueryHandler

使用AsyncQueryHandler异步查询帮助类,可以实现数据库的增删改查(ContentProvidert提供的数据)。如果数据量较小的时候,使用一般的数据查询就可以实现。但是如果数据量较大,就会出现ANR(Application Not Responding)问题,这个时候你也可以使用Handler,但是这样会降低效率,这个时候我们就可以使用Android已经封装好的异步查询框架AsyncQueryHandler

AsyncQueryHandler内部实现:AsyncQueryHandler类封装了调用者线程与工作线程的交互过程。交互的主体是两个Handler,一个运行在调用者线程中,一个运行在工作者线程中。创建AsyncQueryHandler对象,并通过提供onXXXComplete的回调接口,实现事件的完成处理。


Android API中提供了四个方法:

startInsert:插入

startDelete:删除

startUpdate:更新

startQuery:查询

四种方法,并有响应的onXXXComplete()方法与之相对应.于之相对应的4个onXXXComplete()方法都是空实现,因此我们完成相应调用后进行后续其他的操作可以在onXXXComplete()方法中完成.


使用方法

继承AsyncQueryHandler类,并提供onXXXComplete方法的实现(可以实现任何一个或多个,当然你也可以一个也不实现,如果你不关注操作数据库的結果),在你的实现中做一些对数据库操作完成的处理。

使用时直接调用startXXX方法即可。传入的通用参数如下:

token:一个令牌,主要用来标识查询,保证唯一即可.需要跟onXXXComplete方法传入的一致。(当然你也可以不一致,同样在数据库的操作结束后会调用对应的onXXXComplete方法 )

cookie:你想传给onXXXComplete方法使用的一个对象。(没有的话传递null即可)

Uri uri(进行查询的通用资源标志符):

projection 查询的列

selection  限制条件

selectionArgs 查询参数

orderBy 排序条件

下面我们来看看一个用AsyncQueryHandler进行查询的例子:

//必须要有_id字段
		final String[] from=new String[] { "_id","id" };
		//数据库异步查询
		new AsyncQueryHandler(getContentResolver()) {
			protected void onQueryComplete(int token, Object cookie,
					Cursor cursor) {
				//TestAdapter是SimpleCursorAdapter的子类
				TestAdapter adapter = new TestAdapter(MainActivity.this, cursor,
						from);
				listView.setAdapter(adapter);
				listView.setSelection(adapter.getCount()-1);
			};

		}.startQuery(0, null, TestProvider.CONTENT_URI, from,
				null, null, null);

上面“必须要有_id字段”,原因我在这里就不多说了,请参考我的另一篇博客:点击打开链接 http://blog.csdn.net/u014544193/article/details/40976579。TestProvider是ContentProvider的子类。

AsyncQueryHandler的介绍,到这里基本上就结束啦,希望对大家有所帮组!!!

数据库的异步查询-----AsyncQueryHandler