私はアンドロイド上のすべての連絡先を経由するアプリケーションを開発しました。すでに公開され、現在約800台のデバイスにインストールされています。ほぼすべてのデバイスで問題なく動作していますが、一部ではBugSense経由でエラーが発生していますが、まだ解決策が見つかりませんでした。ここでjava.lang.IllegalStateException:CursorWindowから行x col xを読み込めませんでした。カーソルが正しく初期化されていることを確認してください。
は、スタックトレース - 私は得ることのいずれかです。私のコードで
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上の別のスレッドを読みます。 Cursorがnullであるかどうかを調べる代わりに、それは機能しません。 つまり、実際には特定の列/行にのみ問題があります。問題が発生した部分、arroundの
完全なコード・セグメント:エラーが発生した
部分は、簡単な
while (cur.moveToNext())
編集です
if (cur != null && cur.getColumnCount() != 0) {
try {
cur.moveToFirst();
} catch (Exception e) {
initCursor();
}
while (cur.moveToNext()) ....
私を助けてください、私は何もすることができなくてもますます悪い評価を得ています
SRYああ、didn'tことに言及。私はすでにカーソルを動かしています。ちょうどそれをメインポストに追加しました –
あなたはまだカーソルの数をチェックしていません - カーソルが空で、 'moveToNext'ではありません – Asahi
大丈夫、cursor.getColumCountではなくcursor.getCount () 以上です?このエラーを再現し、ソリューションが機能しているかどうかを確認するためのアイデアはありますか? –