Hoạt động của tôi chứa mã này để có được tất cả hình ảnh trên thẻ SD:Không thể tiếp tục Hoạt động lỗi
String[] projection = {MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA,
MediaStore.Images.ImageColumns.DATA};
Cursor cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection, null, null,
MediaStore.Images.Media._ID);
int count = cursor.getCount();
int image_path_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
int i;
for(i = 0; i < count; i++) {
cursor.moveToPosition(i);
String p = cursor.getString(image_path_index);
fd.addToPhonePhoto(p);
}
cursor.close();
việc xảy ra trong khi Hoạt động được khôi phục:
03-14 14:06: 48.380: E/AndroidRuntime (20793): java.lang.RuntimeException: Không thể tiếp tục hoạt động {}: java.lang.RuntimeException: Không thể tiếp tục hoạt động {}: android.database.StaleDataException: Đã cố gắng truy cập con trỏ sau khi nó đã được đã đóng cửa.
Nó chỉ xảy ra trên Android 4.0. Nếu trên Android 2.x hoặc 3.x, nó hoạt động bình thường. Nhưng nếu tôi thay đổi cài đặt hệ thống, chọn tùy chọn "không giữ hoạt động" trong "Tùy chọn nhà phát triển". Lỗi không hiển thị.
Tôi muốn sửa đổi mã của mình để tránh lỗi này mà không thay đổi cài đặt hệ thống. Tôi nên làm như thế nào?
Câu trả lời của bạn là đúng. Nhưng một hoạt động khác của tôi có cùng lỗi. Mã như thế này http://stackoverflow.com/questions/9426170/why-the-cusor-null. Nếu không gọi cursor.close(), cousor sẽ nhận null trong khi chạy vài vòng lặp. Làm thế nào để tránh nó? – brian
@brian Có lẽ vấn đề từ câu hỏi khác của bạn là do kích thước của các hoạt động bạn làm. Bạn thực hiện truy vấn đầy đủ của MediaStore.Images.Media' cho hai cột, và sau đó tạo vài trăm (hoặc thậm chí trên 1000) 'managedQuery' để có được hình thu nhỏ (cũng nếu bạn muốn hình thu nhỏ không nên bạn truy vấn' MediaStore .Images.Thumbnails' contentprovider?). Ngoài ra bạn nói rằng con trỏ đôi khi null, nhưng sẽ không gọi gần trên con trỏ ném một 'NullPointerException'? – Luksprog
Ví dụ: tôi có 2000 ảnh. Vòng lặp for từ 1 đến 1000 hoạt động nhưng sau đó 1000 sẽ nhận được null. Nếu sử dụng NullPointerException có thể gây ra một số hình ảnh không được mở. – brian