android.database.CursorIndexOutOfBoundsException : Index -1 requested

标签 android

我正在尝试使用 RawContacts.entityIterator 读取所有联系人,但我看到了这个错误:

android.database.CursorIndexOutOfBoundsException:请求索引 -1

以下是我的代码:

ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(Contacts.CONTENT_URI, 
       null, null, null, null);

String id = cur.getString(cur.getColumnIndex(Contacts._ID));

if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
         final Uri uri = RawContactsEntity.CONTENT_URI;
            final String selection = Data.CONTACT_ID + "=?";
            final String[] selectionArgs = new String[] {id};

            final Map<String, List<ContentValues>> contentValuesListMap =
                new HashMap<String, List<ContentValues>>();
            EntityIterator entityIterator = null;

            entityIterator = RawContacts.newEntityIterator(cr.query(
                    uri, null, selection, selectionArgs, null));

            while (entityIterator.hasNext()) {
                Entity entity = entityIterator.next();
                for (NamedContentValues namedContentValues : entity.getSubValues()) {
                    ContentValues contentValues = namedContentValues.values;
                    String key = contentValues.getAsString(Data.MIMETYPE);
                    if (key != null) {
                        List<ContentValues> contentValuesList =
                                contentValuesListMap.get(key);
                        if (contentValuesList == null) {
                            contentValuesList = new ArrayList<ContentValues>();
                            contentValuesListMap.put(key, contentValuesList);
                        }
                        contentValuesList.add(contentValues);
                    }
                }
            }
            Log.i(tag, "Contact index=" + id);
        } 
    }

谁能告诉我我的代码有什么问题。

最佳答案

执行query后,必须调用cur.moveToFirst()...

试试这个

ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(Contacts.CONTENT_URI, 
       null, null, null, null);

if(cur != null && cur.moveToFirst())
{
       String id = cur.getString(cur.getColumnIndex(Contacts._ID));

        if (cur.getCount() > 0) {
         ...

关于android.database.CursorIndexOutOfBoundsException : Index -1 requested,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4481895/

相关文章:

android - SharedPreferences.commit 失败,出现 java.io.IOException : No space left on device

java - 用于排队最大数量元素的最有效数据存储对象

javascript - 在 sqlite 中出现错误,例如 ionic1 中的查询

Android 包名称 - 使用破折号

java - 将变量传递给 Android 的 AsyncHttpResponseHandler 回调

android - SQLiteOpenHelper 应用程序打开了太多文件

javascript - 在 Android WebView 中调用 javascript 函数

java - 同步 Android sqlite 数据库和 GAE 数据存储

java android 将资源文件路径传递给方法参数

java - 如何在代码中设置 ListView 的填充?