ContentResolver之读取联系人

package com.qianfeng.contentprovidercontacts;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {
	/**
	 * ContactsContract.Contacts.CONTENT_URI;//联系人的Uri对象
	 * content://com.android.contacts.raw_contacts
	 * 
	 * ContactsContract.CommonDataKinds.Phone.CONTENT_URI;//获取联系人电话的Uri
	 * content://com.android.contacts/data/phones
	 * 
	 * ContactsContract.CommonDataKinds.Email.CONTENT_URI;//获取联系人邮箱的Uri
	 * content://com.android.contacts/data/emails
	 */
	private ListView lv;
	private ContentResolver resolver;
	private Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;// 联系人的Uri对象
	private Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;// 获取联系人电话的Uri
	private Uri emailUri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;// 获取联系人邮箱的Uri
	//操作联系人  增删改
	private Uri doUri = android.provider.ContactsContract.Data.CONTENT_URI;
	private List<Map<String, Object>> list;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		list = new ArrayList<Map<String, Object>>();
		lv = (ListView) findViewById(R.id.lv);
		resolver = getContentResolver();// 得到内容解析者对象
		//list = getData();// 获取数据源
		//list = getContactsList();// 获取数据源
		Cursor cursor=resolver.query(contactsUri, null, null, null, null);
		list=getData1(cursor);
		SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, list,
				R.layout.item, new String[] {
						ContactsContract.Contacts.DISPLAY_NAME, "phone",
						ContactsContract.CommonDataKinds.Email.DATA },
				new int[] { R.id.tv_name, R.id.tv_number, R.id.tv_email });

		lv.setAdapter(adapter);
	}

	/**
	 * 获取联系人的 姓名 电话号 邮箱
	 * 
	 * @param cursor
	 * @return
	 */
	public List<Map<String, Object>> getData() {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		Cursor cursor = resolver.query(contactsUri, null, null, null, null);
		while (cursor.moveToNext()) {
			Map<String, Object> map = new HashMap<String, Object>();
			// 联系人的id
			int contactid = cursor.getInt(cursor
					.getColumnIndex(ContactsContract.Contacts._ID));
			// 获取联系人的name
			String contactName = cursor.getString(cursor
					.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

			map.put(ContactsContract.Contacts._ID, contactid);
			map.put(ContactsContract.Contacts.DISPLAY_NAME, contactName);
			// 通过联系人的id 获取联系人电话信息
//			Cursor phoneCusor = resolver.query(phoneUri, null,
//					ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID
//							+ "=?", new String[] { contactid + "" }, null);
			
			Cursor phoneCusor=resolver.query(phoneUri, null,
					ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID+"=?", 
					new String[]{contactid+""}, null);
			while (phoneCusor.moveToNext()) {
				// 获取联系人电话号码
				String phone = phoneCusor
						.getString(phoneCusor
								.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
				map.put("phone", phone);
			}

			Cursor emailCusor = resolver.query(emailUri, null,
					ContactsContract.CommonDataKinds.Email.RAW_CONTACT_ID
							+ "=?", new String[] { contactid + "" }, null);
			while (emailCusor.moveToNext()) {
				// 获取联系人邮箱
				String email = emailCusor
						.getString(emailCusor
								.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
				map.put(ContactsContract.CommonDataKinds.Email.DATA, email);
			}

			list.add(map);
		}

		return list;
	}

	// 按钮的点击事件
	public void clickBtn(View v) {
		switch (v.getId()) {
		case R.id.btn_add:// 添加数据
			InsertData();
			break;
		case R.id.btn_update:// 修改数据
			UpdateData();
			break;
		case R.id.btn_delete:// 删除数据
			DeleteData();
			break;

		default:
			break;
		}
	}
	/**
	 * 删除联系人数据
	 */
	public void DeleteData(){
		
		int flag = resolver.delete(doUri,Data.RAW_CONTACT_ID+"=?", new String[]{3+""});
		if(flag>0){
			Toast.makeText(MainActivity.this, "删除成功11111", 0).show();
		}else{
			Toast.makeText(MainActivity.this, "删除不成功。。。", 0).show();
		}
	}
	
	/**
	 * 修改联系人
	 */
	public void UpdateData(){
		ContentValues values = new ContentValues();
		values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "110");
		
		int flag = resolver.update(doUri, values, Data.RAW_CONTACT_ID+"=?", new String[]{3+""});
		if(flag>0){
			Toast.makeText(MainActivity.this, "修改成功", 0).show();
		}else{
			Toast.makeText(MainActivity.this, "修改不成功。。。", 0).show();
		}
	
	}

	/**
	 * 添加联系人
	 */
	public void InsertData() {//向Data表中插入信息
		ContentValues values =new ContentValues();
		Uri newUri = resolver.insert(RawContacts.CONTENT_URI, values);
		long contactsId =ContentUris.parseId(newUri);//得到要插入的联系人id
		
		//添加联系人名称
		values= new ContentValues();
		values.put(Data.RAW_CONTACT_ID, contactsId);
		//标志 当前data存储 联系人数据
		values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
		//添加联系人名称
		values.put(StructuredName.DISPLAY_NAME, "zhangsansan");
		resolver.insert(doUri, values);
		//添加电话号码
		values= new ContentValues();
		values.put(Data.RAW_CONTACT_ID, contactsId);
		values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);//插入电话信息
		values.put(Phone.NUMBER, "12345654321");
		resolver.insert(doUri, values);
		//添加邮箱
		values= new ContentValues();
		values.put(Data.RAW_CONTACT_ID, contactsId);
		values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);//插入邮箱信息
		values.put(Email.DATA,"12345654321");
		resolver.insert(doUri, values);
	}
	
	
	/**
	 * 通过contentreslover查询联系人的 姓名  电话 邮箱等数据展示
	 * @return 存储数据的集合
	 */
	public List<Map<String, Object>> getContactsList(){
		List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
		Cursor cursor=resolver.query(contactsUri, null, null, null, null);//查询raw_contacts表中的数据 _id display_name
		while(cursor.moveToNext()){
			Map<String, Object> map=new HashMap<String, Object>();
			//获取联系人的id
			int contactId=cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));
			//获取联系人的名字
			String display_name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
			
			map.put(ContactsContract.Contacts._ID, contactId);
			map.put(ContactsContract.Contacts.DISPLAY_NAME, display_name);
			
			System.out.println("==>"+display_name);
			
			//根据当前联系人的id查询在data表中的电话的信息
			Cursor phoneCursor=resolver.query(phoneUri, null,ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID+"=?", 
								new String[]{contactId+""}, null);
			String phone="";
			while(phoneCursor.moveToNext()){
				//获取当前联系人的电话号码
				phone=phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
				System.out.println("------phone-----"+phone);
			}
			map.put("phone", phone);
			
			//根据当前联系人的id查询data表中的邮箱的信息
			Cursor emailCursor=resolver.query(emailUri, null,ContactsContract.CommonDataKinds.Email.RAW_CONTACT_ID+"=?", 
								new String[]{contactId+""}, null);
			String email="";
			while(emailCursor.moveToNext()){
				//获取当前联系人的email信息
				email=emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
			}
			map.put(ContactsContract.CommonDataKinds.Email.DATA, email);
			
			list.add(map);
		}
		return list;
	}
	
	
	/**
	 * 获取联系人的,姓名,电话,邮箱等
	 * 
	 * @param cursor
	 */
	public List<Map<String, Object>> getData1(Cursor cursor) {
		list = new ArrayList<Map<String, Object>>();
		while (cursor.moveToNext()) {
			Map<String, Object> map = new HashMap<String, Object>();

			// 联系人的id
			int contactId = cursor.getInt(cursor
					.getColumnIndex(ContactsContract.Contacts._ID));
			// 获取联系人的name
			String contactName = cursor.getString(cursor
					.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
			map.put(ContactsContract.Contacts._ID, contactId);
			map.put(ContactsContract.Contacts.DISPLAY_NAME, contactName);

			// 通过联系人的id 获取联系人电话信息
			Cursor phoneCursor = resolver.query(phoneUri, null,
					ContactsContract.CommonDataKinds.Phone.CONTACT_ID
							+ "=?", new String[] { contactId + "" }, null);
			String phone = null;
			while (phoneCursor.moveToNext()) {
				// 获取联系人的电话号码
				phone = phoneCursor
						.getString(phoneCursor
								.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
				map.put("phone", phone);
			}
			phoneCursor.close();

			Cursor emailCursor = resolver.query(emailUri, null,
					ContactsContract.CommonDataKinds.Email.CONTACT_ID
							+ "=?", new String[] { contactId + "" }, null);
			String email = null;
			while (emailCursor.moveToNext()) {
				// 获取联系人的邮箱
				email = emailCursor
						.getString(emailCursor
								.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
				map.put(ContactsContract.CommonDataKinds.Email.DATA, email);

			}
			emailCursor.close();
			System.out.println("------------------------" + contactId);
			System.out.println("------------------------" + contactName);
			System.out.println("------------------------" + phone);
			System.out.println("------------------------" + email);

			
			list.add(map);
		}
		cursor.close();
		return list;
	}


}









评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值