2016-09-22 7 views
-2

電話から連絡先リストを取得して重複を避けたい。私はそれがGoogleアカウント、電話またはSIMからの連絡先を取得していると思います。重複した連絡先を避ける方法。連絡先は同じ番号を持つことができますが、番号は異なります。同じ名前と同じ番号がリストに表示されるべきではありません。 これがコードです。電話機から重複を避けて別個の一意の連絡先を取得する

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が作成されると、イテレータを使用して一意の電話番号を持つ連絡先を取得できます。

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を使用するために呼び出すことができます。

関連する問題