在Android中获取随机联系号码

时间:2011-09-27 20:29:46

标签: android cursor contacts

我正在尝试使用以下代码从联系人中获取随机手机号码:

    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()方法引起的。有谁知道我哪里出错了?这是在Android 2.1中使用ContactsContract。 Eclipse没有错误。

谢谢!

1 个答案:

答案 0 :(得分:0)

moveToFirst()方法返回boolean。如果它能够移动到第一行,则返回true,否则返回false,表示查询返回空集。

使用光标时,您应该遵循以下内容:

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