Java 联系方式返回两次
我正在尝试获取联系人详细信息,如姓名、电话号码、电子邮件和照片。附加到arraylist中的联系人 但对于同时拥有电话号码和电子邮件地址的联系人。我可以看到同一个联系人的名字两次,第一次是它的电子邮件地址,然后是它的电话号码,没有显示为一个联系人(应该是)。 有谁能帮我解决这个问题吗? TIA:) 参考号:Java 联系方式返回两次,java,android,android-contentprovider,android-contacts,Java,Android,Android Contentprovider,Android Contacts,我正在尝试获取联系人详细信息,如姓名、电话号码、电子邮件和照片。附加到arraylist中的联系人 但对于同时拥有电话号码和电子邮件地址的联系人。我可以看到同一个联系人的名字两次,第一次是它的电子邮件地址,然后是它的电话号码,没有显示为一个联系人(应该是)。 有谁能帮我解决这个问题吗? TIA:) 参考号: public ArrayList getPhoneContact(String paramString,ArrayList paramarylist) 抛出自定义异常 { //游标local
public ArrayList getPhoneContact(String paramString,ArrayList paramarylist)
抛出自定义异常
{
//游标localCursor=null;
游标=空;
ArrayList localArrayList=新建ArrayList();
用户;
布尔标志;
字符串s1;
字符串s2;
字符串s6;
字符串s5;
字符串s3;
字符串s4;
int i;
int j;
int k;
int l;
int i1;
尝试
{
游标=getNamesAndPictures(paramArrayList);
if(cursor!=null&&cursor.moveToFirst()){
user=null;
i=cursor.getColumnIndex(“数据1”);
j=cursor.getColumnIndex(“联系人id”);
k=cursor.getColumnIndex(“display_name”);
l=cursor.getColumnIndex(“数据1”);
i1=cursor.getColumnIndex(“mimetype”);
s1=空;
做{
s2=游标.getString(j);
if(s2==null)
返回localArrayList;
//如果(s2等于(s1))
//返回localArrayList;
user=新用户();
s1=s2;
s3=cursor.getString(k);
user.setName(s3);
user.setContactId(s2);
user.setContactType(paramString);
s4=游标.getString(i1);
如果(s4!=null){
if(s4.equals(“vnd.android.cursor.item/phone_v2”)){
s6=游标.getString(i);
用户设置电话(s6);
}
else if(s4.equals(“vnd.android.cursor.item/email_v2”)){
s5=游标.getString(l);
用户设置电子邮件(s5);
}
}
localArrayList.add(用户);
}while(cursor.moveToNext());
}
}
catch(异常localException)
{
//本地异常
}
最后
{
//closeCursor(localCursor);
关闭游标(游标);
closeDatabase();
}
返回localArrayList;
}
以及:
专用光标getNamesAndPictures(ArrayList paramArrayList)
{
字符串str1=PrepareContactDSString(paramarryList);
ContentResolver localContentResolver=this.getAppContext().getContentResolver();
字符串[]arrayOfString={“数据1”、“联系人id”、“显示名称”、“数据id”、“数据1”、“mimetype”};
字符串str2=“display_name!=“null”和((mimetype='vnd.android.cursor.item/phone_v2'和is_primary!=-1)或(mimetype='vnd.android.cursor.item/email_v2'和is_primary!=-1)和联系人id不在(“+str1+”);
返回localContentResolver.query(android.provider.ContactsContract.Data.CONTENT\u URI,arrayOfString,str2,null,“显示\u名称整理本地化ASC”);
}
这是因为您要查询包含数据行的数据表,每一行包含有关联系人的某种信息,例如一行用于电子邮件,一行用于电话号码。
如果您只想获取联系人,则应查询contacts contract.contacts表,但随后您必须查询电子邮件和电话中的每个联系人
public ArrayList<User> getPhoneContact(String paramString, ArrayList<User> paramArrayList)
throws CustomException
{
//Cursor localCursor = null;
Cursor cursor = null;
ArrayList localArrayList = new ArrayList();
User user;
boolean flag;
String s1;
String s2;
String s6;
String s5;
String s3;
String s4;
int i;
int j;
int k;
int l;
int i1;
try
{
cursor = getNamesAndPictures(paramArrayList);
if(cursor != null && cursor.moveToFirst()){
user = null;
i = cursor.getColumnIndex("data1");
j = cursor.getColumnIndex("contact_id");
k = cursor.getColumnIndex("display_name");
l = cursor.getColumnIndex("data1");
i1 = cursor.getColumnIndex("mimetype");
s1 = null;
do{
s2 = cursor.getString(j);
if(s2 == null)
return localArrayList;
//if(s2.equals(s1))
//return localArrayList;
user = new User();
s1 = s2;
s3 = cursor.getString(k);
user.setName(s3);
user.setContactId(s2);
user.setContactType(paramString);
s4 = cursor.getString(i1);
if(s4 != null){
if(s4.equals("vnd.android.cursor.item/phone_v2")){
s6 = cursor.getString(i);
user.setPhone(s6);
}
else if(s4.equals("vnd.android.cursor.item/email_v2")){
s5 = cursor.getString(l);
user.setEmail(s5);
}
}
localArrayList.add(user);
}while(cursor.moveToNext());
}
}
catch (Exception localException)
{
//localException
}
finally
{
//closeCursor(localCursor);
closeCursor(cursor);
closeDatabase();
}
return localArrayList;
}
private Cursor getNamesAndPictures(ArrayList<User> paramArrayList)
{
String str1 = prepareContactIdsString(paramArrayList);
ContentResolver localContentResolver = this.getAppContext().getContentResolver();
String[] arrayOfString = { "data1", "contact_id", "display_name", "_id", "data1", "mimetype" };
String str2 = "display_name != 'null' AND ( (mimetype = 'vnd.android.cursor.item/phone_v2' AND is_primary != -1 ) OR (mimetype = 'vnd.android.cursor.item/email_v2' AND is_primary != -1 ) ) AND contact_id NOT IN ( " + str1 + ")";
return localContentResolver.query(android.provider.ContactsContract.Data.CONTENT_URI, arrayOfString, str2, null, "display_name COLLATE LOCALIZED ASC");
}