Cursor-Fenster kann nicht erstellt werden von binder
1 Cursor cursor = contentResolver.query(MY_URI, new String[] { "first" }, null, null, null);
2 if (cursor != null) {
3 if (cursor.moveToFirst()) {
4 first = cursor.getString(cursor.getColumnIndex("first"));
5 cursor.close();
6 }
7 }
Dann auf Zeile #3 (laut den logs), die ich hin und wieder stoße ich auf diese exception (Auszug):
android.database.CursorWindowAllocationException: Cursor window could not be created from binder.
at android.database.CursorWindow.<init>(CursorWindow.java:134)
at android.database.CursorWindow.<init>(CursorWindow.java:41)
at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:709)
at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:707)
at android.database.CursorWindow.newFromParcel(CursorWindow.java:718)
at android.database.BulkCursorProxy.getWindow(BulkCursorNative.java:196)
...
Irgendwelche Ideen, warum es wirft diese Ausnahme? Danke!
- versuchen Sie, diese link
- Wie viele Zeilen sind in der Datenbank, sichern der
ContentResolver
? Diese Ausnahme wird geworfen, wenn der cursor fehl genügend Speicherplatz zum speichern der Daten benötigt. Da Sie keine Beschränkung der Anzahl der Zeilen in Ihre Abfrage über die Auswahl args, Ihrecursor
wird Speicherplatz behalten Sie eine Kopie aller von Spaltefirst
im Speicher. Wenn es eine große Anzahl von Zeilen, die potenziell den Prozess nicht zuordnen, dass der Speicher. - es gibt nur eine Zeile, das ist, warum ich nicht einen loop für ihn.
- Die einzige andere Sache, die ich denken kann, ist, es ist immer ein Paket beschädigt zurück.
- Können Sie näher auf das "Paket beschädigt". Diese Ausnahme ist nicht immer gefunden, aber es gibt Zeiten, in denen es aufgetreten ist, Frage ich mich, ob es ist, weil andere Dinge.
- Den code nicht
CursorWindow$1.createFromParcel
, die Sie versuchen, zu erstellen eineCursorWindow
aus einerParcel
Objekt. Wenn es nicht zu Versagen, auf die Zuordnung, könnte es scheitern, weil es ist nicht immer Daten für das Paket richtig. Ich kann nur spekulieren, warum das sein könnte-vielleicht ist die Verbindung zu dencontentResolver
ist nicht mehr gültig (wie das halten einer veralteten Griff auf die es während der Drehung des Geräts, hintergrund-thread, etc), das anderen Ende der content resolver ist nicht da irgendeinem Grund (keine Daten-Verbindung, SD-Karte gemountet, etc.), oder eine andere Frage, - wenn Sie möchten, dass einzelne Ergebnis dann verwenden, um durch d.h. der Letzte parameter der Funktion und gehören begrenzen zum Beispiel verwenden, "id DESC limit 1", um Ihr Ergebnis nach id mit dem einzigen Ergebnis
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vermute, der Fehler zusammenhängen kann man nicht schließen Sie Ihren Cursor richtig die ganze Zeit. Versuchen:
Den cursor sollte immer geschlossen sein (unabhängig davon, ob oder nicht die leere). Stellen Sie sicher, dass der rest der app ist, dies zu tun, wie gut.
Versuchen einem anderen thread
. Aber von Android SDK, source-codes, die Aussehen wie 4.0.2_r1
wo mWIndowPtr ist Int
Ausprobieren, auf diese Weise: