2016-04-09 4 views
0

entsprechende Cursor-Aufzeichnungen übereinstimmen In onCreate Ich habe ein Cursor genannt Telefone:versucht, in mein Android App mein

// this query only return contacts with phone number and is not duplicated 
     phones = getContentResolver().query(
//    the table to query 
       ContactsContract.Contacts.CONTENT_URI, 
//    the columns to return 
       null, 
//    selection criteria : 
// we only want contacts that have a name and a phone number. If they have a phone number, the value is 1 (if not, it is 0) 
       ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" + ("1") + "'" + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1", 
//    selection criteria 
       null, 
//    display in ascending order 
       ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 

// phones.getCount returns 134 records, which is the correct number of contacts with corresponding phone number. 

ich Schleife durch die Namen aller 134 Kontakte zu erhalten:

if (phones != null) { 


      if (phones.getCount() == 0) { 
       Toast.makeText(MainActivity.this, "No contacts in your contact list.", Toast.LENGTH_LONG).show(); 
      } 

      while (phones.moveToNext()) { 


       String name = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

Jetzt muss ich die 134 passenden Telefonnummern bekommen. Knapp unterhalb der letzten Zeile oben, noch in der While Loop, mache ich einen neuen Cursor, phonestwo:

// phoneContactId returns 134 records, which is the correct number - it matches the number of contacts with corresponding phone numbers. 
     String phoneContactId = phones.getString(phones.getColumnIndexOrThrow(BaseColumns._ID)); 


     phonestwo = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
            null, 
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", 
            new String[]{phoneContactId}, 
            null); 



     while (phonestwo.moveToNext()) { 
     int phoneType = phonestwo.getInt(phonestwo.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.TYPE)); 
     String phoneNumber = phonestwo.getString(phonestwo.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); 


//For every contact in the phonebook, show the name and number 
     SelectContact selectContact = new SelectContact(); 
     selectContact.setName(name); 
     selectContact.setPhone(phoneNumber); 
     selectContacts.add(selectContact); 
          } 


         } 

        } 

        phones.close(); 
        return null; 
       } 

In meinem Logcat,

I 134 "Telefone" Aufzeichnungen haben, was richtig ist.

Ich habe 134 "phoneContactId" Datensätze, die korrekt ist.

Ich habe 1 und manchmal 2 "phonestwo" Datensätze. Aber ich möchte, dass die Anzahl der Phonestwo-Einträge 134 beträgt, die der entsprechenden 134 Telefonnummern. Irgendwelche Ideen?

Hier ist ein Ausschnitt aus meiner logcat:

04-09 01:22:42.384 8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134 
04-09 01:22:42.384 8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 2 
04-09 01:22:42.384 8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 1191 
04-09 01:22:42.394 8934-8934/com.example.chris.contactlistcustomlistview D/OpenGLRenderer﹕ Enabling debug mode 0 
04-09 01:22:42.404 8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134 
04-09 01:22:42.404 8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 2 
04-09 01:22:42.404 8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 2314 
04-09 01:22:42.414 8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134 
04-09 01:22:42.414 8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1 
04-09 01:22:42.414 8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 1076 
04-09 01:22:42.424 8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134 
04-09 01:22:42.424 8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1 
04-09 01:22:42.424 8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 643 
04-09 01:22:42.454 8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134 
04-09 01:22:42.454 8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1 
04-09 01:22:42.454 8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 746 
04-09 01:22:42.474 8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134 
04-09 01:22:42.474 8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1 
04-09 01:22:42.474 8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 1690 
04-09 01:22:42.504 8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134 
04-09 01:22:42.504 8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1 
04-09 01:22:42.504 8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 1055 
04-09 01:22:42.524 8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134 
04-09 01:22:42.524 8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1 
04-09 01:22:42.524 8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 945 
04-09 01:22:42.554 8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134 
04-09 01:22:42.554 8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 2 
04-09 01:22:42.554 8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 226 
04-09 01:22:42.564 8934-8948/com.example.chris.contactlistcustomlistview E/phones﹕ 134 
04-09 01:22:42.564 8934-8948/com.example.chris.contactlistcustomlistview E/phonestwo﹕ 1 
04-09 01:22:42.564 8934-8948/com.example.chris.contactlistcustomlistview E/Contact ID﹕ 267 

Antwort

0
public class MainActivity extends Activity { 


    Cursor cursor; 
    ListView mainListView; 
    ArrayList hashMapsArrayList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (cursor != null) { 
      cursor.moveToFirst();} 
     try { 

      cursor = getApplicationContext().getContentResolver() 
        .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
      int Idx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID); 
      int nameIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 

      int phoneNumberIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
      int photoIdIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI); 
      cursor.moveToFirst(); 


      Set<String> ids = new HashSet<>(); 
      do { 
       System.out.println("=====>in while"); 
       String contactid=cursor.getString(Idx); 
       if (!ids.contains(contactid)) { 
        ids.add(contactid); 
        HashMap<String, String> hashMap = new HashMap<String, String>(); 
        String name = cursor.getString(nameIdx); 
        String phoneNumber = cursor.getString(phoneNumberIdx); 
        String image = cursor.getString(photoIdIdx); 
        System.out.println("Id--->"+contactid+"Name--->"+name); 
        System.out.println("Id--->"+contactid+"Name--->"+name); 
        System.out.println("Id--->"+contactid+"Number--->"+phoneNumber); 

        if (!phoneNumber.contains("*")) { 
         hashMap.put("contactid", "" + contactid); 
         hashMap.put("name", "" + name); 
         hashMap.put("phoneNumber", "" + phoneNumber); 
         hashMap.put("image", "" + image); 
         // hashMap.put("email", ""+email); 
         if (hashMapsArrayList != null) { 
          hashMapsArrayList.add(hashMap);} 
//     hashMapsArrayList.add(hashMap); 
        } 
       } 

      } while (cursor.moveToNext()); 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (cursor != null) { 
       cursor.close(); 
      } 
     } 
} 
}