第十一章之联系人数据的读取

Notes:

一、导出数据库:

选中Devices后,在File Explorer下导出:data/data/com.android.providers.contacts/databases/contacts2.db

 二、联系人的三张相关表

①raw_contacts表=======联系人表

                    其中的列:

                    ☆(将用到)contact_id    ========代表联系人id

                    account_name管理员的名字

                    version版本号

                    deleted 是否删除

                    display_name联系人姓名

                    ……

②Data表 =========数据表

关联raw_contacts表

外键  raw_contact_id

③mimeType表(存放对应数据类型) 跟data表有关联关系,通过mimeType_id

三、读取联系人需要:

①uri

②表名

当前应用的 ContentResolver实例


具体步骤:

一、创建实体类Contact.java

package com.ryan.pojo;

public class Contact {
	private String phoneNum;
	private String name;
	private int id;
	public String getPhoneNum() {
		return phoneNum;
	}
	public void setPhoneNum(String phoneNum) {
		this.phoneNum = phoneNum;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
}

二、MainActivity.java

package com.ryan.lsn3_11;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;

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());
		}
	}
}

三、在AndroidManifest.xml中添加权限

AndroidMainfest.xml/User Permission====》READ_CONTACTS读取联系人


Tips:

*通过查询是查视图

*游标里面没有_id会报错



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值