2010-07-12 35 views
5

Ai đó có thể giải thích cho tôi này StaleDataExceptionAi đó có thể giải thích cho tôi này `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) 

Khi nào và làm thế nào để chúng ta cần phải đảm bảo một requiry trên con trỏ, và tại sao không thành công với ngoại lệ này?

Trả lời

4

Bạn đang cố truy xuất thông tin từ Cursor đã bị đóng. Bạn phải xác minh xem con trỏ có được đóng hay không bằng cách sử dụng phương thức isClosed.

+0

Bạn có thể đề xuất cho tôi một cách tốt để khắc phục sự cố này không. Hiện nay đang nhận được rất nhiều staleDataException mà tôi không thể sửa chữa nó: ( – Bytecode

1

Bạn không thể đóng con trỏ cho đến khi CursorAdapter không còn cần thiết nữa. Vì vậy, bạn có thể đóng nó trong phương thức onDestroy():

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

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

Trong trường hợp của tôi, tôi đã đóng con trỏ trong phương thức onStop(). Nó bật ra rằng vòng quay của màn hình đã gây ra mã này để chạy và do đó cung cấp cho các StaleDataException.

0

Sử dụng Activity.getContentResolver.query() thay vì Activity.managedQuery(). Vì managedQuery() không còn được dùng nữa. Nó làm việc cho tôi.

Các vấn đề liên quan