android - 查询电话号码

标签 android indexoutofboundsexception android-contacts

我正在学习如何开发 Android 应用程序。但是我很难找回联系人的电话。

我能够使用以下代码列出所有联系人:

private static final String[] contactProjetion = new String[]{
        ContactsContract.Contacts._ID,
        ContactsContract.Contacts.DISPLAY_NAME,
        ContactsContract.Contacts.HAS_PHONE_NUMBER
};

private void getContacts() {
    Cursor cursorContacts = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, contactProjetion, null, null, ContactsContract.Contacts.DISPLAY_NAME);
    while (cursorContacts.moveToNext()) {
        String id = cursorContacts.getString(0);
        String name = cursorContacts.getString(1);
        String hasPhone = cursorContacts.getString(2);
    }
}

但是当使用相同的逻辑搜索联系人的电话时:

                String[] phoneProjetion = new String[]{
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
                        ContactsContract.CommonDataKinds.Phone.NUMBER
                };
                Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, phoneProjetion, null, null, ContactsContract.CommonDataKinds.Phone.NUMBER);
                while (cursorContacts.moveToNext()) {
                    String phone = cursorPhone.getString(1); // this line throw android.database.CursorIndexOutOfBoundsException
                }

我有以下异常:

Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 2

谁能帮帮我?

最佳答案

我相信您正在尝试访问错误的光标。

基本上,消息是说您正在尝试从第一行(位置 -1)之前的 cursorPhone 访问行。这是因为没有向 cursorPhone 光标发出 move 指令,而是您正在发出移动(遍历)cursorContacts 光标。

代替:-

            while (cursorContacts.moveToNext()) {
                String phone = cursorPhone.getString(1); // this line throw android.database.CursorIndexOutOfBoundsException
            }

我认为你应该使用:-

            while (cursorPhone.moveToNext()) { //<<<< CHANGED
                String phone = cursorPhone.getString(1); // this line throw android.database.CursorIndexOutOfBoundsException
            }

关于android - 查询电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49071719/

相关文章:

java - 如何在 Android 的 xml 中为字符串资源指定空值?

java - setMultiChoiceItems 单击时 IndexOutOfBoundsException

android - 滚动时将新项目添加到列表时获取数组索引超出边界异常

java - ArrayIndexOutOfBoundsException - 快速排序算法

android - 如何打开联系人并让用户决定他/她是否要创建或选择一个联系人

java - 滑动变换选择壁纸的位置?

c# - Android Resources.UpdateConfiguration(Configuration, DisplayMetrics) 弃用

ListView 中的 Android EditText?

Android Lollipop 联系人检索空指针异常

java - 获取联系人的照片和姓名