2012-08-10 22 views
15

Tôi có một ContentProvider xử lý tất cả việc chèn và truy xuất dữ liệu liên quan đến ứng dụng của tôi, tôi đang theo mẫu được đề xuất bởi Virgil Dobjanschi trên Google I/O. Tôi đang sử dụng mẫu đầu tiên.Thực hành tốt nhất để tham gia các bảng và thông báo cho ContentObservers trong Android ContentProvider

Vấn đề của tôi là tôi có một thực thể hợp lý được biểu diễn bằng nhiều bảng trong cơ sở dữ liệu.

Ví dụ: tôi có bảng Điều và bảng ArticleExtras. Các bài báo đại diện cho bài báo, trong khi ArticleExtras đại diện cho thông tin bổ sung về một số Điều, như số lượng các bình luận.

Tôi đã sử dụng CursorAdapter trong giao diện người dùng để hiển thị tiêu đề Bài viết và số lượng nhận xét của Điều đó trong một hàng của ListView.

Để thực hiện điều đó, tôi đã thêm câu lệnh left outer join ArticleExtras on trong phương thức truy vấn ContentProvider cho bảng Điều, để CursorAdapter nhận được ArticleExtras cùng với Bài viết.

Khi bài viết mới được tìm nạp từ web, tôi chèn nó vào cơ sở dữ liệu thông qua ContentProvider, sau đó CursorAdapter được thông báo và cập nhật giao diện người dùng, phần này hoạt động như mong đợi.

Nhưng khi tôi tìm nạp số lượng chú thích (ArticleExtras), tôi muốn cùng một CursorAdapter, đang xem những thay đổi trong content://com.myapp.content/Articles, để được thông báo, vì vậy tôi có thể cập nhật hàng của mình trong ListView. Thực hiện hiện tại của tôi là như sau: Sau khi chèn ArticleExtras vào cơ sở dữ liệu, tôi bắt đầu một truy vấn mới để kiểm tra xem bảng Articles có bất kỳ hàng nào có liên quan đến ArticleExtras mà tôi vừa chèn vào hay không. Nếu vậy tôi sẽ tạo một uri mới cho Điều đó (ví dụ: content://com.myapp.cotent/Articles/123), và gọi getContext().getContentResolver().notifyChange(uri, null), vì vậy CursorAdapter tương ứng đang theo dõi những thay đổi của Điều này sẽ được thông báo.

Cách tiếp cận có đúng hay không, có cách nào tốt hơn để thực hiện những gì tôi muốn không?

Trả lời

5

Thanh toán ContactsProvider2, trong đó họ đặt thông báo uri thành AUTHORITY_URI có vẻ như là sự bắt tất cả đối với các URI khác trong nhà cung cấp. Tôi đã có cùng một probem và tôi đã cố gắng này bản thân mình cho một nhà cung cấp với nhiều bảng và tham gia vào những bảng, và nó hoạt động tốt.

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