第十二章之异步查询

Notes:

一、AsyncQueryHandler是什么

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

继承于Handler

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

Protected Methods
HandlercreateHandler(Looper looper)
void onDeleteComplete(int token,  Object cookie, int result)
Called when an asynchronous delete is completed.
void onInsertComplete(int token,  Object cookie,  Uri uri)
Called when an asynchronous insert is completed.
void onQueryComplete(int token,  Object cookie,  Cursor cursor)
Called when an asynchronous query is completed.
void onUpdateComplete(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 Constructors
AsyncQueryHandler( 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>();
	
	@Override
	protected 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表的id
				String 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值