2011-09-27 2 views
0

Je suis en train d'utiliser le code suivant pour saisir un numéro de téléphone mobile au hasard des contacts:Obtenir les numéros de téléphone au hasard dans Android

ContentResolver cr = getContentResolver(); 
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, "DISPLAY_NAME = '" + "NAME" + "'", null, null); 
    cursor.moveToFirst(); 
    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
    Cursor phones = cr.query(Phone.CONTENT_URI, null, Phone.CONTACT_ID + " = " + contactId, null, null); 
    List numbers = new ArrayList(); 

    while (phones.moveToNext()) { 
     String number = phones.getString(phones.getColumnIndex(Phone.NUMBER)); 
     int type = phones.getInt(phones.getColumnIndex(Phone.TYPE)); 
     switch (type) { 
      case Phone.TYPE_MOBILE: 
       numbers.add(number); 
       break; 
     } 
    } 

    Random randGen = new Random(); 
    return (String) numbers.get(randGen.nextInt(numbers.size())); 

Toutefois, l'exécution de ce code produit un accident sur la ligne 4, avec message indiquant "CursorIndexOutOfBoundsException: index 0 demandé, avec une taille de 0". Le crash semble provenir de la méthode cursor.getString(). Est-ce que quelqu'un sait où je vais mal? Cela utilise le ContactsContract dans Android 2.1. Eclipse ne donne aucune erreur.

Merci!

Répondre

0

La méthode moveToFirst() renvoie un boolean. Il renvoie true s'il était en mesure de passer à la première ligne et false sinon, indiquant que la requête a renvoyé un jeu vide.

Lorsque vous utilisez un curseur, vous devez suivre quelque chose comme:

if (cursor.moveToFirst()) { 
    do { 
     // do some stuff 
    } while (cursor.moveToNext()); 
} 
cursor.close(); 
Questions connexes