2012-06-13 32 views
29

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

+2

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) –

+0

@Jim có vấn đề gì với nhà cung cấp nội dung bạn có thể giúp tôi không? –

Trả lời

22

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.

+2

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

+0

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

+0

Tôi đã phải mở rộng 'CursorLoader' với lớp của riêng tôi để xử lý' OrmLite'. – theblang

0

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.

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