2010-07-12 6 views
5

mir jemand diese StaleDataExceptionKann mir jemand erklären, diese `StaleDataException`

07-11 19:58:23.298 E/AndroidRuntime(1044): Uncaught handler: thread main exiting due to uncaught exception 
07-11 19:58:23.368 E/AndroidRuntime(1044): android.database.StaleDataException: Access closed cursor 
07-11 19:58:23.368 E/AndroidRuntime(1044): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:217) 
07-11 19:58:23.368 E/AndroidRuntime(1044): at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:84) 
07-11 19:58:23.368 E/AndroidRuntime(1044): at android.database.CursorWrapper.getInt(CursorWrapper.java:128) 

Wann und wie müssen wir auf dem Cursor ein requiry versichern erklären kann, und warum nicht mit dieser Ausnahme?

Antwort

4

Sie versuchen, Informationen von einer Cursor abzurufen, die bereits geschlossen wurde. Sie müssen überprüfen, ob der Cursor geschlossen ist oder nicht, indem Sie die Methode isClosed verwenden.

+0

Können Sie mir bitte anständig einen Weg vorschlagen, dieses Problem zu beheben. Momentan bekomme ich eine Menge von staleDataException, die ich nicht beheben konnte :( – Bytecode

1

Sie können den Cursor nicht schließen, bis CursorAdapter nicht mehr benötigt wird. So kann man es in onDestroy Methode close():

@Override 
public void onDestroy() { 
super.onDestroy(); 

    //Close the cursor 
    cursor.close(); 
    //Close the database 
    database.close(); 
    } 
0

In meinem Fall war ich schließen Sie den Cursor in der OnStop() -Methode. Es stellte sich heraus, dass die Drehung des Bildschirms dazu führte, dass dieser Code ausgeführt wurde, und daher die StaleDataException-Angabe.

0

Verwenden Sie Activity.getContentResolver.query() anstelle von Activity.managedQuery(). Weil managedQuery() veraltet ist. Für mich geht das.