Cố gắng cập nhật ứng dụng cũ của tôi trong đó một số phương pháp không được chấp nhận. Tôi phát hiện ra rằng nếu tôi muốn làm việc với ListView cho thấy dữ liệu từ db, tôi nên sử dụng LoaderManager + CursorLoader. CursorLoader hoạt động với các nhà cung cấp nội dung. Vì vậy, đối với mỗi bảng trong db của tôi, tôi nên tạo nhà cung cấp nội dung ngay bây giờ? Tại sao phải là tôi ? Theo như tôi biết các nhà cung cấp nội dung được sử dụng để chia sẻ một số thông tin db với các ứng dụng khác, nhưng ứng dụng của tôi không chia sẻ bất kỳ thông tin nào. Vậy tôi có thể sử dụng CursorLoader không có nhà cung cấp nội dung không ???Android: CursorLoader, LoaderManager, SQLite
Trả lời
Tôi đã viết blog post về chủ đề này. Bạn cũng có thể xem số answer này để biết thêm thông tin. Hy vọng rằng nó sẽ xóa mọi thứ cho bạn.
Như Barak đã đề cập, người ta có thể triển khai CursorLoader
mà không có nhà cung cấp nội dung bằng cách mở rộng AsyncTaskLoader<Cursor>
lớp. Điều đó nói rằng, hầu hết các hướng dẫn và mã mẫu sử dụng ContentProvider
s và có vẻ như nhóm Android cũng khuyến khích sử dụng nó. Nó cũng phức tạp hơn rất nhiều so với việc thực hiện lớp của riêng bạn.
Điều đó nói rằng, nếu bạn thực sự không muốn sử dụng nhà cung cấp nội dung, Dianne Hackborn (một trong những nhà phát triển khung Android và còn được gọi là "hackbod" ở đây trên SO) lớp cơ sở dữ liệu thay vì nhà cung cấp nội dung. Cách dễ nhất là chỉ lấy nguồn của lớp CursorLoader
từ thư viện tương thích và thay thế các truy vấn của nhà cung cấp bằng các truy vấn đến lớp trình trợ giúp db của riêng bạn.
Tôi nghĩ đáng lưu ý là việc sử dụng 'ContentProvider' chỉ được khuyến khích nếu bạn định cung cấp dữ liệu cho các ứng dụng khác. Nếu bạn không (tức là dữ liệu riêng tư đối với ứng dụng của mình), thì bạn được khuyến khích sử dụng cơ sở dữ liệu SQLite thuần túy. Để biết thêm thông tin, hãy kiểm tra tài liệu cho [ContentProvider] (https://developer.android.com/reference/android/content/ContentProvider.html). – Felix
Tôi nghĩ "để lấy nguồn của lớp CursorLoader từ thư viện tương thích, và ..." là lựa chọn tốt nhất, phải không? – BornToCode
Tôi đã phải mở rộng 'CursorLoader' với lớp của riêng tôi để xử lý' OrmLite'. – theblang
Có thể, Bạn có thể có Trình tải dữ liệu tùy chỉnh có thể tải các đối tượng mà bạn xác định hoặc bất kỳ loại đối tượng hoặc danh sách nào trong vấn đề đó.
Chỉ cần nhìn vào các mẫu từ sdk android cho LoaderCustomSupport.java trong các mẫu thư viện tương thích và trình diễn.
- 1. Android CursorLoader vs AsyncQueryHandler?
- 2. Sử dụng CursorLoader để truy vấn SQLite DB và điền vào AutoCompleteTextView
- 3. Xử lý các bảng và con trỏ SQLite trên Android
- 4. Android: Sự cố CursorLoader trên Fragment không phải trên cùng
- 5. GROUP BY with CursorLoader
- 6. IllegalStateException - Hỗ trợ LoaderManager với AutocompleteTextView
- 7. Android CursorLoader không phản hồi các thông báo ContentProvider
- 8. CursorLoader, lấy URI cho cơ sở dữ liệu cục bộ
- 9. NullPointerException trong restartLoader Phương pháp LoaderManager
- 10. AlphabetIndexer với Custom Adaptor quản lý bởi LoaderManager
- 11. Cách chuyển (đúng) từ startManagingCursor sang CursorLoader?
- 12. Các phương pháp hay nhất để truy vấn cơ sở dữ liệu SQLite trong ListFragment bằng CursorLoader?
- 13. Android: SQLite - insertWithOnConflict
- 14. Android Sync Sqlite
- 15. Cửa hàng Android SQLite
- 16. Android SQLite CHỌN Query
- 17. thoát Android sqlite vỏ
- 18. Cuộn ngược sqlite Android
- 19. Xử lý ngoại lệ CursorLoader
- 20. SimpleCursorTreeAdapter và CursorLoader cho ExpandableListView
- 21. Cách đọc DB SQLite trong android bằng trình tải con trỏ?
- 22. Android SQLite tự động tăng
- 23. Thông báo DB SQLite Android
- 24. Tệp JSON VS SQLite android
- 25. Thông số rawquery Android SQLite
- 26. Android SQLite đóng ngoại lệ
- 27. CursorLoader - Hai bảng tham gia truy vấn?
- 28. Lấy args Bundle trong callback onLoadFinished CursorLoader
- 29. Danh sách được phân trang và CursorLoader
- 30. Không thể tìm thấy tham chiếu LoaderManager với API Cấp 17
Kiểm tra bài đăng trên blog của tôi về chủ đề: [** Hiểu về 'Trình quản lý tải '**] (http://www.androiddesignpatterns.com/2012/05/why-you-should-use-loadermanager.html) –
@Jim có vấn đề gì với nhà cung cấp nội dung bạn có thể giúp tôi không? –