2016-03-30 8 views
0

これまで、以下のコードでは、電話上のすべての連絡先が正常に取得されました。しかし、Android 6.0では、すべての連絡先が2回連続して取得されるようになりました。それは私が望むものではありません。連絡先のAndroidクエリで同じ番号が2回返されますか?

ArrayList<PersonalContact> allContacts = new ArrayList<>(); 

    Cursor personalContacts = getContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, 
    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 

    if (personalContacts != null && personalContacts.moveToFirst()) 
    { 
     do 
     { 
      String name = personalContacts.getString(personalContacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      String number = personalContacts.getString(personalContacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

      //This if statement is my current hack-y fix to this. 
      if(allContacts.size() < 1 || !allContacts.get(allContacts.size() - 1).getRawPhoneNumber().equals(number)) 
       allContacts.add(new PersonalContact(name, number)); 
     } 
     while (personalContacts.moveToNext()); 
    } 

    if (personalContacts != null) 
     personalContacts.close(); 

    return allContacts; 

各連絡先を1回だけ取得するにはどうすればよいですか?

答えて

1

シンプルでより良い解決策はただ

ArrayList<PersonalContact> allContacts = new ArrayList<>(); 

    Cursor personalContacts = getContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, 
    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 

    if (personalContacts != null && personalContacts.moveToFirst()) 
    { 
     do 
     { 
      String name = personalContacts.getString(personalContacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      String number = personalContacts.getString(personalContacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

    String normalizedNumber = number.replaceAll(" ","").replaceAll("-", ""); 
      if(duplicates.get(normalizedNumber)) 
       return; 
      duplicates.put(normalizedNumber,true); 


      allContacts.add(new PersonalContact(name, number)); 
     } 
     while (personalContacts.moveToNext()); 
    } 

    if (personalContacts != null) 
     personalContacts.close(); 

    return allContacts; 
重複を削除するためにハッシュマップを使用することであろう
関連する問題