2017-12-30 27 views
-2

すべての連絡先を取得するためのコードを実装しましたが、連絡先の一部が見付からない連絡先がすべて表示されていません。 ここに私のコードです:連絡先の取得中にすべての連絡先が表示されない

String[] projection = new String[]{ 
       ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
       ContactsContract.CommonDataKinds.Phone.NUMBER, 
       ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER, 
     }; 
     Cursor cursor = null; 
     try { 
      cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
        projection, null, null, null); 
     } catch (SecurityException e) { 
     } 
     if (cursor != null) { 
      try { 
       HashSet<String> normalizedNumbersAlreadyFound = new HashSet<>(); 
       int indexOfNormalizedNumber = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER); 
       int indexOfDisplayName = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 
       int indexOfDisplayNumber = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
       while (cursor.moveToNext()) { 
        String normalizedNumber = cursor.getString(indexOfNormalizedNumber); 
        if (normalizedNumbersAlreadyFound.add(normalizedNumber)) { 
         String displayName = cursor.getString(indexOfDisplayName); 
         String displayNumber = cursor.getString(indexOfDisplayNumber); 

         listOfContacts.add(new PhoneContactsModel(displayName, displayNumber, false)); 

        } else { 
        } 
       } 
       Log.d("tag", "size of listOfContacts =1====" + listOfContacts.size()); 


      } finally { 
       cursor.close(); 
      } 
     } 

何が起こっているのか分かりません。私を助けてください。

答えて

0

多くの問題は、コードにあります。

  1. あなたはCommonDataKinds.Phone.CONTENT_URIテーブルの上に照会しているので、当然、あなたは何の電話番号を持っていない連絡先(名前とメールで例えば連絡先)
  2. を取得することはありません
  3. normalizedNumbersAlreadyFoundですでに見つかった電話が含まれている連絡先をスキップしています。そのため、共有電話と2つの連絡先(自宅の電話番号など)がある場合は、その1つをスキップすることがあります。あなたは彼らのNORMALIZED_NUMBERフィールドを持っていない多くの連絡先をスキップします。その場合には
  4. CommonDataKinds.Phone.NORMALIZED_NUMBERmay be nullは、

あなたも何の携帯電話を持っていない連絡先を含める必要がある場合を設定し、私は完全に異なるコードをお勧めします。電話機との連絡を取る必要がある場合は、NORMALIZED_NUMBERに頼らず、プロジェクションにCommonDataKinds.Phone.CONTACT_IDを追加し、連絡先ごとに独自のキーとして設定することをおすすめします。

+0

私にこれに関するサンプルコードを教えていただけますか? – basha

+0

これを参照してください:https://stackoverflow.com/a/47788324/819355 – marmor

関連する問題