2016-03-30 28 views
0

Geçmişte, aşağıdaki kod telefondaki tüm kişileri başarıyla aldı. Ancak, Android 6.0'da, şimdi tüm bağlantıları iki kez, sırayla alır. istediğim bu değil.Kişiler için Android sorgulama iki kez aynı numarayı döndürüyor?

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; 

Her kişiyi bir defada nasıl alabilirim?

cevap

1

basit ve daha iyi bir çözüm sadece

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; 
çoğaltır kaldırmak için bir hashmap kullanmak olacaktır