Obtenir le nom et l'email de la liste de contacts est très lent
Je me suis mise en œuvre d'un AutoCompleteTextView et j'ai besoin du Nom et de l'adresse E-Mail de tous mes contacts.
J'ai trouvé cet extrait que je l'exécute de façon asynchrone, mais c'est très lent.
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();
}
}
}
Je suis d'effectuer une sorte de requête interne et je pense que c'est le problème. Est-il un moyen de les régler et de le rendre plus rapide?
Avez-vous réussi à le faire fonctionner ?
L'extérieur
L'extérieur
if (cur.getCount() > 0)
est redondante et peut être supprimé.OriginalL'auteur Marco Matarazzi | 2012-08-24
Vous devez vous connecter pour publier un commentaire.
quelques remarques:
ContactsContract.CommonDataKinds.Email.CONTENT_URI
pour obtenir des informations, reportez-vous à ContactsContract.CommonDataKinds.E-mail pour plus d'informations quelles colonnes vous pouvez interrogerTravailler comme un charme.. 🙂
merci beaucoup, amélioration incroyable
comment puis-je lire la v-card dans le moyen efficace cela signifie pour lire ensemble du carnet d'adresses.
M'a aidé.. thx
OriginalL'auteur biegleux
Vous ne devriez pas interroger directement les ContactsContract.Contacts
Faire juste un requête sur le ContactsContract.CommonDataKinds avec les données de messagerie genre.
La ContactsContract.CommonDataKinds.E-mail hérite de beaucoup d'autres interfaces que vous pouvez utiliser pour construire votre projection. (voir hérité des constantes de la documentation)
Par exemple :
pour être utilisé avec le
Vous pouvez récupérer beaucoup d'informations (telles que l'id d'utilisateur, nom d'affichage utilisateur,...) directement à partir de l'email de données de genre.
EDIT:
Je viens de réaliser que vous essayez de construire un AutoCompleteTextView.
Vous devez remplacer le
runQueryOnBackgroundThread
méthode et laconvertToString
de votre CursorAdapter et l'utilisation de la E-mail.CONTENT_FILTER_URIJe vraiment fortement vous suggérons de prendre un coup d'oeil à la ApiDemo échantillons.
Surtout la AutoComplete4.java de l'échantillon que vous pouvez trouver ICI.
OriginalL'auteur Timothée Jeannin
OriginalL'auteur Praveen Kumar