Получение случайных контактных номеров в Android - PullRequest
0 голосов
/ 28 сентября 2011

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

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

Однако выполнение этого кода приводит к сбою в строке 4 с сообщением «CursorIndexOutOfBoundsException: индекс 0 запрошен, с размером 0». Кажется, сбой вызван методом cursor.getString (). Кто-нибудь знает, где я иду не так? Это использует ContactsContract в Android 2.1. Затмение не дает ошибок.

Спасибо!

1 Ответ

0 голосов
/ 28 сентября 2011

Метод moveToFirst() возвращает boolean.Он возвращает true, если ему удалось перейти к первой строке, и false в противном случае, указывая, что запрос возвратил пустой набор.

При использовании курсора вы должны следовать чему-то вроде:

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