gpt4 book ai didi

android - java.lang.IllegalStateException : Couldn't read row x col x from CursorWindow. 确保正确初始化 Cursor.contacts

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:05:19 24 4
gpt4 key购买 nike

我开发了一个应用程序,它遍历 android 上的所有联系人。它已经发布,目前安装在大约 800 台设备上。它几乎可以在所有设备上运行,没有任何问题,但在某些设备上,我通过 BugSense 收到错误消息,而且我还没有找到有效的解决方案。

这是我得到的堆栈跟踪之一:

java.lang.IllegalStateException: Couldn't read row 0, col 8 from CursorWindow. Make sure the Cursor is     initialized correctly before accessing data from it.
at android.os.Parcel.readException(Parcel.java:1335)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:182)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:136)
at android.database.BulkCursorProxy.getWindow(BulkCursorNative.java:192)
at android.database.BulkCursorToCursorAdaptor.onMove(BulkCursorToCursorAdaptor.java:94)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:178)
at android.database.AbstractCursor.moveToNext(AbstractCursor.java:209)
at android.database.CursorWrapper.moveToNext(CursorWrapper.java:166)
at de.android.contactscleaner.ContactsActivity.deleteContacts(ContactsActivity.java:118)
at de.android.contactscleaner.ContactsActivity$1.run(ContactsActivity.java:61)
at java.lang.Thread.run(Thread.java:856)

在我的代码中,我在访问光标之前执行以下操作,这也是解决方案的一部分:

    private void initCursor() {
cr = getContentResolver();

if (cr != null) {
cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null,
null, null);

}
}

private void retryCursorInitialisation() {

while (attempt < Rules.cursor_init_attempts) {
attempt++;
initCursor();
// Check if cursor is initialisated correctly
if (cur != null && cur.getColumnCount() != 0) {
if (attempt >= Rules.cursor_init_attempts_to_report) {
BugSenseHandler.sendEvent("Cursor init succeded after "
+ attempt + "/" + Rules.cursor_init_attempts
+ " retries");
}
break;
} else {
if (attempt == Rules.cursor_init_attempts) {
BugSenseHandler
.sendEvent("Cursor init completly failed after "
+ attempt + " attempts");
}
}

}
}

如果游标“损坏”,它永远不会重新初始化游标,因为 cur.getColumCount() 永远不会为 0。

(我在 stackoverflow 上的另一个线程中读到,您应该检查列数是否为 0,而不是检查 Cursor 是否为 null,但这不起作用。这意味着,实际上只有某些列/行有问题。

发生错误的部分很简单

        while (cur.moveToNext())

编辑:

出现问题的部分的完整代码段:

        if (cur != null && cur.getColumnCount() != 0) {
try {
cur.moveToFirst();
} catch (Exception e) {
initCursor();
}

while (cur.moveToNext()) ....

请帮帮我,我的收视率越来越差,却无能为力

最佳答案

看来这可能与提交给 Google 的错误有关:http://code.google.com/p/android/issues/detail?id=32472 .它说已分配,但自去年以来我没有看到任何 Activity 。

(根据错误,您是否更新了后备数据库表中的任何行,这些行会在 CursorWindow 更新时导致行计数不同?)

关于android - java.lang.IllegalStateException : Couldn't read row x col x from CursorWindow. 确保正确初始化 Cursor.contacts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16244148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com