2016-06-23 5 views
0

Ich arbeite an einer App, die die Telefonkontakte liest und sie in Form einer Liste anzeigt. Ich muss eine Nachricht an ausgewählte Kontakte aus der Liste senden. Aber das Problem ist, dass die App gehängt wird, wenn das Handy mehr als 500 Kontakte hat. Ich bekomme nicht, wo das Problem ist ..App wird gehängt, während ich versuche, Kontakte zu lesen

Ich habe diesen Code im Internet gefunden und in meiner App implementiert. Kontakte werden angezeigt, aber nach so viel Zeit. Hier ist mein Code

ContentResolver cr = getActivity().getContentResolver(); 
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null,null,null); 
if (cur.getCount() > 0) { 
    while (cur.moveToNext()) { 
     String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     if (Integer.parseInt(cur.getString(cur.getColumnIndex(
     ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
     Cursor pCur = 
       cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
       null, 
       ContactsContract.CommonDataKinds.Phone.CONTACT_ID +"=?", 
       new String[]{id}, null); 
     while (pCur.moveToNext()) { 
       int phoneType = pCur.getInt(pCur.getColumnIndex(
        ContactsContract.CommonDataKinds.Phone.TYPE)); 
       String phoneNumber = pCur.getString(pCur.getColumnIndex(
        ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       switch (phoneType) { 
        case Phone.TYPE_MOBILE: 
         Log.e(name + "(mobile number)", phoneNumber); 
         break; 
        case Phone.TYPE_HOME: 
         Log.e(name + "(home number)", phoneNumber); 
         break; 
        case Phone.TYPE_WORK: 
         Log.e(name + "(work number)", phoneNumber); 
         break; 
        case Phone.TYPE_OTHER: 
         Log.e(name + "(other number)", phoneNumber); 
         break;         
        default: 
         break; 
       } 
      } 
      pCur.close(); 
    } 
} } 
+0

Und was ist dein Problem? Lags, Kontakte nicht angezeigt? Bitte geben Sie uns weitere Informationen –

+0

veröffentlichen Sie Ihren Code auch – Stallion

Antwort

1

Um Kontakte zu lesen -

private void fetchContacts() { 
    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
    while (phones.moveToNext()) { 
     String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
     String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     if (name == null || name.equals("")) 
      name = phoneNumber; 
     if (Utils.notNull(phoneNumber)) { 
      phoneNumber = Utils.checkAndWrapMobileNumber(getApplicationContext(), phoneNumber); 
      allContacts.put(phoneNumber, name); 
      contactList.add(phoneNumber); 
     } 
    } 
    phones.close(); 
} 

Und besser diesen Code in AssyncTask zu verwenden, um im Hintergrund-Thread lesen.

Hoffe, es wird Ihnen helfen :)

0

es schwere Aufgabe in UI Thread zurückzuführen ist, dass Blöcke UI, für diesen Zweck AyncTask verwenden.

Verwandte Themen