我正在尝试使用以下代码从联系人中获取随机手机号码:
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没有错误。
谢谢!
答案 0 :(得分:0)
moveToFirst()
方法返回boolean
。如果它能够移动到第一行,则返回true
,否则返回false
,表示查询返回空集。
使用光标时,您应该遵循以下内容:
if (cursor.moveToFirst()) {
do {
// do some stuff
} while (cursor.moveToNext());
}
cursor.close();