把联系人保存到数据库中
package com.litsoft.util;
import java.util.List;
import java.util.Map;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.net.Uri;
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 Contact2DBUtil {
// ,Phone.TYPE_OTHER+""// 这个是特殊情况
private static String phoneType[] = { Phone.TYPE_HOME + "",Phone.TYPE_MOBILE + "", Phone.TYPE_WORK + "" };
// ,Email.TYPE_MOBILE+"",// 这个是特殊情况
private static String emailType[] = { Email.TYPE_WORK + "",Email.TYPE_HOME + "", Email.TYPE_OTHER + "" };
//key {0,1,2,3,4,5,6,7} == {aim,live,yahoo,skyp,qq,gtalk,icq,jabber}
private static String imType[] ={"0","1","2","3","4","5","6","7"};
//key {1,2,3} =={home,work,other} //,StructuredPostal.TYPE_OTHER+""是特殊情况
private static String addrType[]={StructuredPostal.TYPE_HOME+"",StructuredPostal.TYPE_WORK+""};
private static ContentResolver resolver;
private ContentValues values = new ContentValues();
public void save(Contact2 newContact) {
Uri rawContactUri = resolver.insert(RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
try {
//保存头像
if(newContact.getContactIcon()!=null){
saveIcon(rawContactId, newContact.getContactIcon());
}
// 1.保存displayName;
if (newContact.getName() != null) {
saveName(rawContactId, newContact.getName());
}
// 2.保存电话 key{1,2,3,7} ==={home,mobile,work,other}
if (newContact.getPhoneNumberMap() != null
&& newContact.getPhoneNumberMap().size() > 0) {
saveNumberOrEmailOrIm(rawContactId, newContact
.getPhoneNumberMap(), Phone.CONTENT_ITEM_TYPE,
phoneType, DB2ContactUtil.numberSplit, Phone.NUMBER,
Phone.TYPE,Phone.TYPE_OTHER);
}
// 3.保存email key {1,2,3,4} =={home,work,other, mobile }
if (newContact.getEmailMap() != null
&& newContact.getEmailMap().size() > 0) {
saveNumberOrEmailOrIm(rawContactId, newContact.getEmailMap(),
Email.CONTENT_ITEM_TYPE, emailType,
DB2ContactUtil.emailSplit, Email.DATA1, Email.TYPE,Email.TYPE_MOBILE);
}
// 4.保存im key {0,1,2,3,4,5,6,7} == {aim,live,yahoo,skyp,qq,gtalk,icq,jabber}
if (newContact.getImMap() != null
&& newContact.getImMap().size() > 0) {
saveNumberOrEmailOrIm(rawContactId, newContact.getImMap(),
Im.CONTENT_ITEM_TYPE, imType,
"", Im.DATA1, Im.DATA5,-1);
}
// 5.保存address
if (newContact.getAddrMap() != null
&& newContact.getAddrMap().size() > 0){
saveAddr(rawContactId, newContact.getAddrMap());
}
// 6.保存组织(公司)
if (newContact.getOrganizationMap() != null
&& newContact.getOrganizationMap().size() > 0){
saveOrganization(rawContactId, newContact.getOrganizationMap());
}
// 7.保存notes
if (newContact.getNotes() != null
&& newContact.getNotes().size() > 0){
saveNotesOrNicknameOrWebsites(rawContactId, newContact.getNotes(), Note.CONTENT_ITEM_TYPE);
}
// 8.保存nicks
if (newContact.getNicks() != null
&& newContact.getNicks().size() > 0){
saveNotesOrNicknameOrWebsites(rawContactId, newContact.getNicks(), Nickname.CONTENT_ITEM_TYPE);
}
// 9.保存website
if (newContact.getWebsites() != null
&& newContact.getWebsites().size() > 0){
saveNotesOrNicknameOrWebsites(rawContactId, newContact.getWebsites(), Website.CONTENT_ITEM_TYPE);
}
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* 根据Id 保存 头像
* @param rawContactId
* @param icon
*/
public void saveIcon(long rawContactId,byte[] icon){
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
values.put(Photo.PHOTO, icon);
resolver.insert(Data.CONTENT_URI, values);
values.clear();
}
/**
* 根据Id 保存organization
* @param rawContactId
* @param organizationMap
*/
public void saveOrganization(long rawContactId,Map<String,List<String[]>> organizationMap){
for(Map.Entry<String, List<String[]>> entry : organizationMap.entrySet()){
List<String[]> organizationInfo;
if(entry.getKey().equals("1")){//work
organizationInfo = entry.getValue();
if(organizationInfo.size()>0){
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
values.put(Organization.TYPE, Organization.TYPE_WORK);
values.put(Organization.COMPANY, organizationInfo.get(0)[0]);
values.put(Organization.TITLE, organizationInfo.get(0)[1]);
resolver.insert(Data.CONTENT_URI, values);
values.clear();
}
}else if(entry.getKey().equals("2")){//other
organizationInfo = entry.getValue();
for(String str[]:organizationInfo){
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
values.put(Organization.TYPE, Organization.TYPE_OTHER);
values.put(Organization.COMPANY, str[0]);
values.put(Organization.TITLE, str[1]);
resolver.insert(Data.CONTENT_URI, values);
values.clear();
}
}
}
values.clear();
}
/**
* 根据id 保存 note,nickname,website
* @param rawContactId
* @param list
* @param mimeType
*/
public void saveNotesOrNicknameOrWebsites(long rawContactId,List<String> list,String mimeType){
for(String str:list){
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, mimeType);
values.put("data1", str);//Note.NOTE,Nickname.NAME,Website.URL
resolver.insert(Data.CONTENT_URI, values);
values.clear();
}
}
/**
* 根据Id保存地址 data4-data10 : {street pobox neigborbood city state zip country}==str[0-6]
* @param rawContactId
* @param addrMap
*/
public void saveAddr(long rawContactId,Map<String, List<String[]>> addrMap){
List<String[]> addrInof ;
for(Map.Entry<String, List<String[]>> addr :addrMap.entrySet()){
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
if(testInclude(addrType, addr.getKey())){
addrInof = addr.getValue();
for(String[]info:addrInof){
for(int i=0;i<info.length;i++){
values.put("data"+(i+4), info[i]);//0~6 对应 data4~data10
}
}
//只有一条
values.put(StructuredPostal.TYPE, addr.getKey());//地址类型
resolver.insert(Data.CONTENT_URI, values);
values.clear();
}
else if((StructuredPostal.TYPE_OTHER+"").equals(addr.getKey())){
addrInof = addr.getValue();
for(String[]info:addrInof){
for(int i=0;i<info.length;i++){
values.put("data"+(i+4), info[i]);//0~6 对应 data4~data10
}
//有一条,插入一条 n 条
values.put(StructuredPostal.TYPE, addr.getKey());//地址类型
resolver.insert(Data.CONTENT_URI, values);
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
}
}
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
}
values.clear();
}
/**
* 保存电话号码或者邮箱,或者Im: {1,2,3,7}
*
* @param rawContactId
* @param phoneNumberMap
*/
public void saveNumberOrEmailOrIm(long rawContactId,// id
Map<String, String> phoneNumberMap,// 传入的集合
String mimeType,// 数据类型
String[] types,// 包含的类型
String split,//
String data1,// "data1"={Phone.NUMBER,Email.DATA1,Im.DATA1}
String columType,// {phone=email=data2,im=data5} 主要体现分类
int typeOther) {// 特殊类型的分割符
for (Map.Entry<String, String> set : phoneNumberMap.entrySet()) {
if (testInclude(types, set.getKey())) {
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, mimeType);
values.put(data1, set.getValue());// 值
values.put(columType, set.getKey());// 类型
resolver.insert(Data.CONTENT_URI, values);
values.clear();
} else if (set.getKey().equals(typeOther + "")) {// 特殊情况
String str[] = set.getValue().split(split);
for (String value : str) {
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, mimeType);
values.put(data1, value);// 值
values.put(columType, set.getKey());// 类型
resolver.insert(Data.CONTENT_URI, values);
values.clear();
}
}
}
}
/**
* 根据Id 保存 名字
*
* @param rawContactId
* @param name
* 包括familyName 和 GiveName
*/
public void saveName(long rawContactId, String[] name) {
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.FAMILY_NAME, name[0]);
values.put(StructuredName.GIVEN_NAME, name[1]);
resolver.insert(Data.CONTENT_URI, values);
values.clear();
}
/**
* 判断 a数组是否包含b
*
* @param a
* @param b
* @return
*/
public static boolean testInclude(String a[], String b) {
if (a == null || a.length == 0 || b == null || "".equals(b)) {
return false;
}
for (String c : a) {
if (c.equals(b)) {
return true;
}
}
return false;
}
public static void setResolver(ContentResolver resolver2) {
resolver = resolver2;
}
}