2016-09-22 2 views
-2

전화에서 연락처를 검색하여 중복을 피하고 싶습니다. 나는 그것이 Google 계정, 전화 또는 심에서 연락처를 검색하고 있다고 생각합니다. 중복 된 연락처를 피하는 방법. 연락처는 같은 번호이지만 다른 번호를 가질 수 있습니다. 동일한 이름과 동일한 번호가 목록에 나타나서는 안됩니다. 이 코드는 입니다.중복성을 피하면서 전화에서 고유하고 고유 한 연락처를 가져옵니다.

ContentResolver cr = getContentResolver(); 
     final String[] PROJECTION = new String[] { 
       ContactsContract.CommonDataKinds.Phone.CONTACT_ID, 
       ContactsContract.Contacts.DISPLAY_NAME, 
       ContactsContract.CommonDataKinds.Phone.NUMBER 
     }; 
     String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" 
       + ("1") + "'"; 
     //String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER; 
     Cursor cur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, selection 
       + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER 
       + "=1", null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 

     if(cur != null) { 
      if (cur.getCount() > 0) { 
       while (cur.moveToNext()) { 

        String contactPhone = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        String contactName = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
        String contactId = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID)); 
        contacts.add(new Contact().setId(contactId).setName(contactName).setNumber(contactPhone)); 
       } 
      } 

      cur.close(); 
     } 

답변

1

나는 그것을 믿을인지 아닌지 잘 모르겠지만,이 값으로 키와 접촉 이름으로 전화 번호를 ArrayMap 나를

먼저 사본 연락처를했다. 이 방법에서는 전화 번호가 반복 되더라도 이름이 업데이트됩니다.

일단 ArrayMap이 생성되면 iterator를 사용하여 고유 한 전화 번호가있는 연락처를 검색 할 수 있습니다.

ArrayMap<String, String> arrayMap = new ArrayMap<>(); 
// 
// 
while (cursor.moveToNext()){ 
       String phone = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
       arrayMap.put(phone, name); 
      } 
// 
// 
for(String key: arrayMap.keySet()){ 
      JSONObject jsonObject = new JSONObject(); 
      try { 
       jsonObject.put("name", arrayMap.get(key)); 
       jsonObject.put("phone_number", key); 
       contactsList.put(jsonObject); 
      }catch(JSONException e){ 
       e.printStackTrace(); 
      } 
     } 

귀하의 경우 직접 new Contacts(...) 대신 된 JSONObject를 사용하는 호출 할 수 있습니다.