2012-02-24 3 views
0

Я хочу получить имя, номер телефона и адрес электронной почты в одном запросе. Возможно ли получить все в 1 запросе?Приложение зависает при отображении контакта

У меня есть почти 1000 контактов в телефоне и его зависнет, когда я попытался следующие строки кода, чтобы показать мой контакт:

Cursor cursor = this.getContentResolver().query(intent.getData(), null, null, null,null); 
while (cursor.moveToNext()) 
{   
    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));   
    hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
    if (hasPhone.equalsIgnoreCase("1")) 
     hasPhone = "true"; 
    else 
     hasPhone = "false" ; 

    if (Boolean.parseBoolean(hasPhone)) 
    { 
     Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
       null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, 
       ContactsContract.Contacts.DISPLAY_NAME + " COLLATE NOCASE"); 
     while (phones.moveToNext()) 
     { 
      String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      String name = phones.getString(phones.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));         
     } 
     phones.close(); 
    } 
    // Find Email Addresses 
    Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null, 
     ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,null, 
     ContactsContract.Contacts.DISPLAY_NAME + " COLLATE NOCASE");// contactId+ " DESC"); 
    while (emails.moveToNext()) 
    { 
     String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));    
     String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));    
    } 
    emails.close(); 
    } //while (cursor.moveToNext()) 
+0

Пожалуйста, пост код, который звонит этот метод .... –

ответ

1

сделать это в AsyncTask ... Всегда предпочтительный способ для времени процесс потребления ...

у меня была такая же проблема, когда я имел около 500 контактов .. Я сделал это в AsyncTask и она работала хорошо ..

+0

я уже c эта функция используется в async Task. doInBackground() – Monali

+0

@Monali as ntc said Сделайте это в AsyncTask, он будет работать отлично – Piyush

Смежные вопросы