SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Android - cố gắng mở lại một đối tượng đã bị đóng:SQLiteQuery sử dụng loaderManager

Mã của bạn hơi khó hiểu do định dạng kém.

Dù sao, câu trả lời được cung cấp thực sự không phải là một bản sửa lỗi. Con trỏ được trả về tại onLoadFinished nên được đảm bảo không bị đóng, vì vậy bạn đang tải con trỏ của mình sai cách. Cụ thể, khi bạn gọi

adapter.getFilter().filter(s.toString());

Tôi không thực sự hiểu chuyện gì đang xảy ra ở đây, nhưng tôi hiểu rằng bạn nên làm điều gì đó khác. Chỉ cần lưu trữ bộ lọc truy vấn trong một trường trong Fragment của bạn và chạy getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this); . Lưu ý rằng bạn chạy restartLoader chứ không phải initLoader , bởi vì bạn có dữ liệu khác mà bạn muốn truy vấn.

Trong onCreateLoader của bạn , bạn nên sử dụng bộ lọc mà bạn đã lưu trữ làm biến phiên bản cho selection .

Một số thông tin cơ bản

initLoader tải dữ liệu đã được tải trong lần chạy cuối cùng, nếu dữ liệu đã chạy trước đó. Đây là lý do tại sao bạn gọi trong phương thức khởi tạo của Fragment / Activity. Điều này rất hữu ích vì bạn sẽ không phải yêu cầu thay đổi hướng.

restartLoader dọn dẹp dữ liệu đã tải trước đó để bạn nhận được Loader mới để làm việc với (có thể) dữ liệu khác nhau.

Nếu bạn không thực sự chắc chắn mình vẫn đang làm gì, hãy đọc bài viết này, đây là một bài viết giới thiệu rất hay về Máy xúc với mã mẫu trông rất giống những gì bạn muốn đạt được. Ban đầu, máy xúc lật khá bí ẩn, nhưng khi bạn hiểu rõ thì mọi việc sẽ suôn sẻ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 Cách Chỉ Trả lại Giá trị Số từ Cột Cơ sở dữ liệu SQLite

  2. SQLite trả về mã lỗi là 14

  3. Đặt hàng SQLite theo ngày1530019888000

  4. Hiển thị dữ liệu từ cơ sở dữ liệu bằng cách sử dụng bộ điều hợp cơ sở và chế độ xem danh sách

  5. Truy vấn SQLite:lấy tất cả các cột của một hàng (android)?