2016-06-23 7 views
0

電話の連絡先を読み取ってリスト形式で表示するアプリで作業しています。私はリストから選択した連絡先にメッセージを送信する必要があります。しかし、問題は、モバイルが500以上の連絡先を持っている場合、アプリがハングアップするということです。私は問題がどこにあるのかわからない。連絡先の読み取り中にアプリがハングアップする

私はこのコードをインターネットで見つけ、自分のアプリに実装した。連絡先は表示されますが、時間がかかります。そのバックグラウンドスレッドで読む

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(); 
} 

、より良いAssyncTaskにこのコードを使用する - ここに私のコードは、連絡先を読むには

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

あなたの問題は何ですか?遅れて、連絡先が表示されない?さらに詳しい情報をお知らせください –

+0

あなたのコードも投稿してください – Stallion

答えて

1

です。

は、それはあなたを助けることを願っています:)

0

それは、この目的のためにブロックUI、使用AyncTaskことUIスレッドで重い作業によるものです。

関連する問題