私はAutoCompleteTextViewを実装しており、すべての連絡先の名前と電子メールが必要です。 私は非同期で実行しているこのスニペットを見つけましたが、それは非常に遅いです。連絡先リストからの名前と電子メールの取得が非常に遅い
ContentResolver cr = 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));
Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id}, null);
while (emailCur.moveToNext()) {
String email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
autoCompleteAdapter.add(name + " - " + email);
}
emailCur.close();
}
}
}
私は一種の内部クエリを実行していますが、それは問題だと思います。それを調整してより速くする方法はありますか?あなたが直接ContactsContract.Contacts
を問い合わせるべきではありません
あなたはそれを動作させることができましたか? –
外側の 'if(cur.getCount()> 0)'は冗長であり、削除することができます。 – mdup