`
mjbb
  • 浏览: 89157 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Contact 联系人工具类(一)

阅读更多
从数据库中取出数据封装成对象:

package com.litsoft.util;

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

import android.content.ContentResolver;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.provider.ContactsContract.CommonDataKinds.Nickname;
import android.provider.ContactsContract.CommonDataKinds.Note;
import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.CommonDataKinds.Website;

import com.litsoft.domain.Contact2;

public class DB2ContactUtil {
	public static ContentResolver resolver;
	public static String numberSplit="NO";
	public static String emailSplit=";";
	/**
	 * 删除一个
	 */
	public static void  deleteById(String contactId ){
		 resolver.delete(Data.CONTENT_URI, ContactsContract.Data.CONTACT_ID + "=" + contactId, null);
		 resolver.delete(RawContacts.CONTENT_URI, RawContacts.CONTACT_ID + "=" + contactId, null);
	}
	/**
	 * 删除所有的 Contact
	 */
	public static void deleteAll(){
		 resolver.delete(Data.CONTENT_URI, null, null);
		 resolver.delete(RawContacts.CONTENT_URI, null, null);
	}
	/**
	 * 获得所有的Contact
	 * @return
	 */
	public static List<Contact2> getAllContact(){
		List<Contact2> contactList = new ArrayList<Contact2>();
		ArrayList<String> idList = getContactIdList();
		Contact2 newContact ;
		for(String contactId:idList){
			newContact = new Contact2();
			newContact.setId(contactId);
			//1.头像
			newContact.setContactIcon(getContactIcon(contactId));
			//2.名字
			newContact.setName(getName(contactId));
			//3.电话
			newContact.setPhoneNumberMap(getPhoneNumber(contactId));
			//4.Email
			newContact.setEmailMap(getEmail(contactId));
			//5.im
			newContact.setImMap(getAIM(contactId));
			//6.add
			newContact.setAddrMap(getAddressDetail(contactId));
			//7.organization
			newContact.setOrganizationMap(getOrganizations(contactId));
			//8.notes
			newContact.setNotes(getNotes(contactId));
			//9.nickname
			newContact.setNicks(getNick(contactId));
			//10.website
			newContact.setWebsites(getWebsite(contactId));
			
			contactList.add(newContact);
		}
		return contactList;
	}
	/**
	 * 根据id 获得 头像
	 * @param contactId
	 * @return
	 */
	public static byte[] getContactIcon(String contactId){
		byte[] image = null;
		Cursor cursor = resolver.query(Data.CONTENT_URI, null,
				Photo.CONTACT_ID + " = " + contactId + " and " + Data.MIMETYPE
				+ " = '" + Photo.CONTENT_ITEM_TYPE+"'", null, null);
		if(cursor.moveToNext()){
			image = cursor.getBlob(cursor.getColumnIndex(Photo.PHOTO));
		}
		return image;
	}
	/**
	 * 根据Id 得到 familyName 和 giveName [1,0]
	 */
	public static  String[] getName(String contactId){
		String name[] = new String[2];
		Cursor cursor = resolver.query(Data.CONTENT_URI, null,
				StructuredName.CONTACT_ID + " = " + contactId + " and " + Data.MIMETYPE
				+ " = '" + StructuredName.CONTENT_ITEM_TYPE+"'", null, null);
		while(cursor.moveToNext()){
			name[1]= cursor.getString(cursor.getColumnIndex(StructuredName.FAMILY_NAME));
			name[0] = cursor.getString(cursor.getColumnIndex(StructuredName.GIVEN_NAME));	
		}
		System.out.println("give name :" + name[0] + " famliy name :" + name[1]);
		return name;
	}
	
	/**
	 * 获得所有联系人的id列表
	 */
	public static ArrayList<String> getContactIdList() {
		ArrayList<String> contactIdList = new ArrayList<String>();
		Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
		String id = "";
		while (cursor.moveToNext()) {
			id = cursor.getString(cursor.getColumnIndex(Contacts._ID));
			contactIdList.add(id);
			System.out.println("contractId is :"+id);
		}
		return contactIdList;
	}
	
	/**
	 * 根据用户Id 电话号码
	 * 
	 * @param contactId key{1,2,3,7} ==={home,mobile,work,other}
	 * @return
	 */
	public static Map<String,String> getPhoneNumber(String contactId) {
		Map<String,String> phoneNumberMap = new HashMap<String, String>();
		String value = "";
		String key ="";
		Cursor phones = resolver.query(Phone.CONTENT_URI, null,
				Phone.CONTACT_ID + " = " + contactId, null, null);
		while (phones.moveToNext()) {
			key = phones.getString(phones.getColumnIndex(Phone.DATA2));
			value = phones.getString(phones.getColumnIndex(Phone.DATA1));
			if("7".equals(key)){
				String v = phoneNumberMap.get(key);
				if(v!=null&&!"".equals(v)){
					value = v+numberSplit+ value;
				}
			}
			phoneNumberMap.put(key, value);
			System.out.println("number type is :" + key + " number is :" + value);
		}
		
		return phoneNumberMap;
	}
	
	/**
	 * 根据用户Id  获得email 
	 * key {1,2,3,4} =={home,work,other, mobile }
	 * 
	 */
	public static Map<String,String> getEmail(String contactId) {
		Map<String,String> emailMap = new HashMap<String, String>();
		String key = "";
		String value = "";
		Cursor emails = resolver.query(Email.CONTENT_URI, null,
				Email.CONTACT_ID + " = " + contactId, null, null);
		while (emails.moveToNext()) {
			
			key = emails.getString(emails.getColumnIndex(Email.DATA2));
			value = emails.getString(emails.getColumnIndex(Email.DATA1));
			if("4".equals(key)){
				String v = emailMap.get(key);
				if(v!=null&&!"".equals(v)){
					value = v+emailSplit+ value;
				}
			}
			emailMap.put(key, value);
			System.out.println("email type is :" + key + " email is :" + value);
		}
		return emailMap;
	}
	/**
	 * 根据用户Id获得 AIM
	 * key {0,1,2,3,4,5,6,7} == {aim,live,yahoo,skyp,qq,gtalk,icq,jabber}
	 * @param contactId 
	 * @return 
	 */
	public static Map<String,String> getAIM(String contactId) {
		Map<String,String> im =new HashMap<String,String>();
		String key;
		String value;
		String selection = Im.CONTACT_ID + " = " + contactId //获得联系人的具体id    
		+ " and " + Data.MIMETYPE + " = '" + CommonDataKinds.Im.CONTENT_ITEM_TYPE+"'";
		Cursor cursor = resolver.query(Data.CONTENT_URI, null, selection, null, null);
		while(cursor.moveToNext()){
			key = cursor.getString(cursor.getColumnIndex(Im.DATA5));//判断im 不同种类
			value = cursor.getString(cursor.getColumnIndex(Im.DATA1));
			if("7".equals(key)){//jabber类型
				String v = im.get(key);
				if(v!=null&&!"".equals(v)){
					value = v+";"+ value;
				}
				
			}
			im.put(key, value);
			System.out.println("aimType :"+ key +" ; aim : " + value);
		}
		//System.out.println("aim : " + aim);
		return im;
	}

	//=======================================Map<String,List<String[]>>类型========================================
	/**
	 * 根据用户Id 获得 Address
	 * data4-data10 : {street pobox neigborbood city state zip country}==str[0-6]
	 * key {1,2,3} =={home,work,other}
	 */
	public static Map<String,List<String[]>> getAddressDetail(String contactId) {
		Map<String,List<String[]>> postalMap = new HashMap<String, List<String[]>>();
		String key;
		List<String[]> addrList;
		String addr[];
		Cursor adds = resolver
				.query(StructuredPostal.CONTENT_URI, null,
						StructuredPostal.CONTACT_ID + " = " + contactId, null, null);
		while (adds.moveToNext()) {
			key  = adds.getString(adds
					.getColumnIndex(StructuredPostal.DATA2));
			addr = new String[7];
			addr[0] = adds.getString(adds
					.getColumnIndex(StructuredPostal.STREET));
			addr[1] =adds.getString(adds
					.getColumnIndex(StructuredPostal.POBOX));//信箱号码
			addr[2] = adds.getString(adds
					.getColumnIndex(StructuredPostal.NEIGHBORHOOD));
			addr[3] = adds.getString(adds
					.getColumnIndex(StructuredPostal.CITY));
			addr[4]=adds.getString(adds
					.getColumnIndex(StructuredPostal.REGION));// 省份
			addr[5] =adds.getString(adds
					.getColumnIndex(StructuredPostal.POSTCODE));// 邮政编码
			addr[6] = adds.getString(adds
					.getColumnIndex(StructuredPostal.COUNTRY));
			addrList = postalMap.get(key);
			if(addrList!=null&&!addrList.isEmpty()){
				addrList.add(addr);
				postalMap.put(key, addrList);
			}else{
				addrList = new ArrayList<String[]>();	
				addrList.add(addr);
				postalMap.put(key, addrList);
			}
			System.out.println("address's type is :"+ key +" -- address: " + addr[0]+":"+ addr[1]+":"+addr[2]+":"+addr[3]+":"+addr[4]+":"+addr[5]+":"+addr[6]);
		}
		
		return postalMap;
	}
	/**
	 * 根据用户Id 获得 公司
	 * organization: Map<String,List> String 是数据类型  List 是一个数组:String [data1(company),data4(position)]
	 * key {1,2} ==={work ,other}
	 */
	public static Map<String,List<String[]>> getOrganizations(String contactId) {
		Map<String,List<String[]>> companyMap = new HashMap<String, List<String[]>>();
		String key = "";
		List<String[]> positionList;
		String pos[];
		
		Cursor organization = resolver.query(Data.CONTENT_URI, null,
				Data.CONTACT_ID + "=" + contactId + " AND " + Data.MIMETYPE
						+ "='" + Organization.CONTENT_ITEM_TYPE + "'", null,
				null);
		while (organization.moveToNext()) {
			pos =  new String[2];
			key = organization.getString(organization
					.getColumnIndex(CommonDataKinds.Organization.DATA2));
			pos[0] = organization.getString(organization
					.getColumnIndex(CommonDataKinds.Organization.COMPANY));
			pos[1] = organization.getString(organization
					.getColumnIndex(CommonDataKinds.Organization.TITLE));
			positionList = companyMap.get(key);
			if(positionList!=null&&!positionList.isEmpty()){
				positionList.add(pos);
				companyMap.put(key, positionList);
			}else{
				positionList = new ArrayList<String[]>();	
				positionList.add(pos);
				companyMap.put(key, positionList);
			}
//			positionList.add(pos);
			System.out.println("--------------------------------");
			System.out.println("type:" + key);
			System.out.println("company:" + pos[0]);
			System.out.println("position:" + pos[1]);
			
		}
		
			return companyMap;
		
	}
	//=========================================List<String> 数据类型===========================================
	/**
	 * 根据用户id 获得notes
	 */
	public static List<String> getNotes(String contactId) {
		List<String> notesList = new ArrayList<String>();
		String note = "";
		Cursor notes = resolver.query(Data.CONTENT_URI, null,
				Data.CONTACT_ID + "=" + contactId + " AND " + Data.MIMETYPE
						+ "='" + Note.CONTENT_ITEM_TYPE + "'",
				null, null);
		while (notes.moveToNext()) {
			note = notes
					.getString(notes
							.getColumnIndex(Note.NOTE));
			System.out.println("note :" + note);
			notesList.add(note);
		}
		return notesList;
	}
	/**
	 * 根据用户id 获得nicks
	 */
	public static List<String> getNick(String contactId) {
		List<String> nickList = new ArrayList<String>();
		String nick = "";
		Cursor nicks = resolver.query(Data.CONTENT_URI, null,
				Data.CONTACT_ID + "=" + contactId + " AND " + Data.MIMETYPE
						+ "='" + Nickname.CONTENT_ITEM_TYPE + "'",
				null, null);
		while (nicks.moveToNext()) {
			nick = nicks
					.getString(nicks
							.getColumnIndex(Nickname.DATA1));
			System.out.println("nick :" + nick);
			nickList.add(nick);
		}
		return nickList;
	}
	/**
	 * 根据用户id 获得website
	 */
	public static List<String> getWebsite(String contactId) {
		List<String> webSiteList = new ArrayList<String>();
		String webSite = "";
		Cursor nicks = resolver.query(Data.CONTENT_URI, null,
				Data.CONTACT_ID + "=" + contactId + " AND " + Data.MIMETYPE
						+ "='" + Website.CONTENT_ITEM_TYPE + "'",
				null, null);
		while (nicks.moveToNext()) {
			webSite = nicks
					.getString(nicks
							.getColumnIndex(Website.DATA1));
			webSiteList.add(webSite);
			System.out.println("webSite : "+ webSite);
		}
		return webSiteList;
	}
}

分享到:
评论
2 楼 greenboy1 2010-12-06  
非常好 谢谢
1 楼 bug_shi 2010-11-20  
import com.litsoft.domain.Contact2; 在那里啊,小的刚入门请指教。

相关推荐

    联系人导出 ContactList

    综上所述,"联系人导出 ContactList" 是一款全面的联系人管理工具,它不仅为普通用户提供便捷的导出服务,还为开发者提供了丰富的 API 和文档,以促进其在各类应用中的集成和扩展。通过良好的设计和功能实现,...

    ContactManager

    2. 用户界面(UI)设计:ContactManager的用户界面应简洁易用,包括添加、删除、编辑联系人,以及搜索和分类等功能。UI设计需遵循人机交互原则,提供良好的用户体验。 3. 响应式设计:为了适应不同设备和屏幕尺寸,...

    基于java的联系人导出 ContactList.zip

    本项目名为"基于java的联系人导出 ContactList.zip",显然它是一个使用Java实现的用于导出联系人信息的程序。从提供的压缩包文件列表来看,我们可以深入探讨以下几个关键知识点: 1. **Java编程**:作为标签,Java...

    基于Java的联系人导出 ContactList.zip

    另一种可能性是,该项目是一个命令行工具,用户通过输入特定的命令来导出联系人。Java的System类和Runtime类可以用来执行这些命令。 6. **日志记录**: 在开发过程中,日志记录是必不可少的。Java的log4j或java....

    java源码:联系人导出 ContactList.zip

    【标题】"java源码:联系人导出 ContactList.zip" 涉及到的核心知识点主要集中在Java编程语言以及文件处理领域。这个项目可能是一个用于管理个人或企业联系人的应用程序,能够导出联系人信息,方便备份或共享。以下...

    基于Java的实例源码-联系人导出 ContactList.zip

    这个压缩包"基于Java的实例源码-联系人导出 ContactList.zip"是关于使用Java编程语言实现的一个联系人管理系统的源代码示例。这个系统可能包含了一个功能,即能够导入和导出联系人列表,方便用户管理和共享他们的...

    windows mobile 5.0 批量删除contact

    在Windows Mobile 5.0操作系统中,管理联系人(Contact)是智能手机用户常见的任务之一。然而,当联系人数量庞大时,单个删除可能会变得非常耗时。批量删除功能可以帮助用户快速清理不再需要的联系人记录,从而节省...

    Contact Provider练习应用

    在"Contact Provider"的案例中,我们可能创建了一个自定义的联系人管理器,模仿系统内置的联系人应用,允许用户添加、查询、修改或删除联系人信息。 创建ContentProvider需要继承`android.content.ContentProvider`...

    ContactManager.zip

    7. **面向对象编程**:通过类的设计,可能有Contact类代表一个联系人,ContactManager类管理一组联系人,体现类的封装、继承和多态特性。 8. **异常处理**:在处理用户输入或文件操作时,可能会遇到错误,因此程序...

    Androidの联系人群组Group操作

    在实际开发中,通常会封装成易于使用的工具类或服务,以便在应用中方便地进行联系人群组的操作。`Demotest`可能是这样一个示例项目,它可能包含了实现这些操作的代码示例和测试用例。 总的来说,理解并熟练运用上述...

    ios-联系人添加.zip

    在iOS开发中,添加联系人是一项常见的功能,尤其对于企业应用或者个人管理工具来说非常实用。这个名为"ios-联系人添加.zip"的压缩包很可能包含了一个示例项目,教你如何在iOS应用中实现添加联系人的功能。我们将围绕...

    可以添加删除联系人的电话簿tel

    我们可以定义一个`PhoneBook`类,包含一个`Contact`对象的集合,并提供添加新联系人(`addContact`)和删除联系人(`removeContact`)的方法。 为了实现添加联系人功能,`addContact`方法会接收一个`Contact`对象或其...

    Pro Android学习:联系人API

    在Android平台上,联系人API是开发者与用户手机通讯录进行交互的重要工具。通过这个API,开发者可以实现诸如读取联系人信息、添加新联系人、更新现有联系人、删除联系人以及管理联系人分组等一系列功能。在"Pro ...

    联系人管理系统

    一个优秀的联系人管理系统能够帮助我们高效地存储、检索和更新联系人资料,提高工作效率。本项目“联系人管理系统”正是这样一个应用,它巧妙地集成了Hibernate和Spring框架,为开发者提供了一个学习J2EE架构的实用...

    添加联系人号码

    在Android操作系统中,"添加联系人号码"是一个常见的功能,涉及到用户界面交互、意图(Intent)以及联系人操作等核心知识点。下面将详细讲解这些概念及其应用。 首先,当我们提到"通过点击图片按钮",这是在谈论...

    访问通信录中的联系人和添加联系人

    可以使用像`ShadowContactsContract`这样的Shadow类(来自Mockito库)来模拟联系人数据的读写操作。同时,测试时应确保遵循Android测试的最佳实践,如使用`@RunWith(AndroidJUnit4.class)`注解,以及在合适的生命...

    ContactList:显示联系人列表的应用

    在IT行业中,开发一个“ContactList:显示联系人列表的应用”通常涉及到许多核心技术和实践,尤其是在使用Java语言的情况下。以下是一些关键知识点的详细说明: 1. **Java基础**:作为标签,Java是该应用的基础编程...

    Contact_List.zip_contact

    可能使用了JavaBeans或者实体类来封装联系人的信息,同时结合Hibernate框架与数据库进行交互,完成数据的CRUD操作。 2. **视图(View)**:视图通常由JSP或FreeMarker等模板技术实现,用于展示用户界面。在通信录...

    查看并获取联系人电话

    在Android和iOS等移动操作系统中,查看和获取联系人电话是一项常见的功能,广泛应用于社交应用、通讯工具和其他需要用户授权访问联系人信息的软件中。本文将深入探讨如何在这些平台上实现这一功能。 首先,我们从...

    Android_contact.rar_android通讯录_contact

    本资源"Android_contact.rar"提供了一个基础的Android通讯录实现,涵盖了添加联系人、发送短信以及拨打电话等功能。接下来,我们将深入探讨这些核心知识点。 1. **AndroidManifest.xml配置**: 在Android应用中,`...

Global site tag (gtag.js) - Google Analytics