您的位置:首页 > 产品设计 > UI/UE

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

2014-11-10 10:38 585 查看
使用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字段”,原因我在这里就不多说了,请参考我的另一篇博客:点击打开链接 /article/9276795.html。TestProvider是ContentProvider的子类。

AsyncQueryHandler的介绍,到这里基本上就结束啦,希望对大家有所帮组!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: