第十二章之异步查询

来源:互联网 发布:淘宝商家所在地怎么改 编辑:程序博客网 时间:2024/05/16 18:59

Notes:

一、AsyncQueryHandler是什么

①AsyncQueryHandler(异步的查询操作帮助类,其实它同样可以处理增删改)

继承于Handler

②异步就好像大家一起上公交车,可以不排队,同步就是大家排队上车,一次只能上一个。

Protected MethodsHandlercreateHandler(Looper looper)voidonDeleteComplete(int token, Object cookie, int result)

Called when an asynchronous delete is completed.
voidonInsertComplete(int token, Object cookie, Uri uri)
Called when an asynchronous insert is completed.
voidonQueryComplete(int token, Object cookie, Cursor cursor)
Called when an asynchronous query is completed.
voidonUpdateComplete(int token, Object cookie, int result)
Called when an asynchronous update is completed.

二、为什么要用AsyncQueryHandler

A helper class to help make handling asynchronous ContentResolver queries easier. 
让ContentResolver查询更加容易的帮助类。 

三、如何使用AsyncQueryHandler

①继承AsyncQueryHandler类

②提供onXXXComplete方法

③实例化一个AsyncQueryHandler对象

Public ConstructorsAsyncQueryHandler(ContentResolver cr)

queryHandler = new MySyncQueryHandler(getContentResolver());

④启动查询

queryHandler.startQuery(0, /标识、令牌(不需要)
null, //cookie用来保存数据(一般情况不用)
RawContacts.CONTENT_URI,//ContentProvider的访问的Uri
new String[]{RawContacts._ID},//要返回的列
null, //查询条件
null, //查询条件的值
null); //排序

⑤在子线程(回调函数中)设置数据到适配器

四、具体案例

MainActivity.java

package com.ryan.lsn3_11;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.AsyncQueryHandler;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract.Contacts;import android.provider.ContactsContract.Data;import com.ryan.lsn3_12_2.MainActivity.MySyncQueryHandler;import com.ryan.pojo.Contact;public class MainActivity extends Activity {ContentResolver resolver;List<Contact> list = new ArrayList<Contact>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);resolver = getContentResolver();queryContacts();}public void queryContacts(){//查询raw_contact联系人表Cursor c = resolver.query(Contacts.CONTENT_URI, new String[]{Contacts._ID}, null, null, null);while(c.moveToNext()){Contact contact = new Contact();//获得联系人的String id = c.getString(c.getColumnIndex(Contacts._ID));//根据联系人的id来查询Data表Cursor c1 = resolver.query(Data.CONTENT_URI, new String[]{Data._ID,Data.DATA1,Data.MIMETYPE}, Data.RAW_CONTACT_ID +" = ?", new String[]{id}, null);contact.setId(Integer.parseInt(id));while(c1.moveToNext()){//获得data表的idString data_id = c1.getString(c1.getColumnIndex(Data._ID));//获得数据String data1 = c1.getString(c1.getColumnIndex(Data.DATA1));//获得类型String mimeType = c1.getString(c1.getColumnIndex(Data.MIMETYPE));System.out.println(data_id+"---"+data1+"---"+mimeType);//根据类型来判断数据if(mimeType.equals("vnd.android.cursor.item/phone_v2")){//设置电话号码contact.setPhoneNum(data1);}else if(mimeType.equals("vnd.android.cursor.item/name")){//设置姓名contact.setName(data1);}}c1.close();//添加联系人对象到集合当中list.add(contact);}c.close();for(Contact c1 : list){System.out.println("联系人的id为:"+c1.getId());System.out.println("联系人的电话为:"+c1.getPhoneNum());System.out.println("联系人的姓名为:"+c1.getName());}}}


0 0
原创粉丝点击