30

Vì vậy sau khi xem video rất rõ về chủ đề này, tôi quyết định sử dụng mẫu thiết kế B. Sử dụng trình cung cấp nội dung với servicehelper.Mẫu thiết kế phần còn lại của Google IO, đã hoàn thành ContentProvider và bị kẹt ngay bây giờ

google design pattern on rest

Về cơ bản tôi có các tập tin sau đây:

  • MyProvider
  • MyDatabase
  • Mycontract

trong hoạt động bây giờ tôi có thể nhận được contentresolver và truy vấn các nhà cung cấp . Tất cả đang làm việc tuyệt vời cho đến nay.

Bây giờ tôi cần phải đồng bộ hóa nhà cung cấp nội dung của tôi để tìm nạp dữ liệu từ API REST của tôi. Vì vậy, tôi cần triển khai dịch vụ trợ giúp dịch vụ và phương thức Rest. Nghiên cứu ứng dụng Google IO đã giúp tôi rất nhiều, tôi mới làm quen với android nên vẫn khó có thể đoán được.

Tôi thấy Google sử dụng RemoteHandlers để xử lý dữ liệu bên ngoài, tôi đoán chúng là các lớp Bộ xử lý trong biểu đồ?

Điều tôi không hiểu là cách tôi có thể triển khai phần dịch vụ servicehelper + để lấy dữ liệu từ mạng.

  • Tôi gọi điện cho người trợ giúp dịch vụ ở đâu?
  • dịch vụ và người trợ giúp cần làm gì chính xác?
  • có bất kỳ ví dụ hay về mẫu thiết kế chính xác này không?

Tôi đã đọc một số chủ đề về ngăn xếp về điều này, tất cả đều đề xuất các phương pháp khác nhau. Tôi tìm thấy một ví dụ mà tuyên bố một restprovider và sau đó myProvider đã mở rộng nhà cung cấp đó. Tôi không thích những giải pháp đó và muốn làm theo mẫu thiết kế có cấu trúc này. Tôi hy vọng các bạn có thể giúp tôi!

Edit: nguồn dự án đã có sẵn: https://github.com/samvdb/TracknTrace

+0

Bạn có liên kết tới video Google IO mà bạn tham chiếu không? –

+0

Tôi nghĩ rằng bạn có thể tìm thấy tất cả các câu trả lời của mình trong dự án này: https://github.com/necronet/Eli-G nó đã được nêu chi tiết trong [bài đăng SO này] (http://stackoverflow.com/questions/ 4948152/cần-mẫu-android-nghỉ-khách-dự án-mà-thực hiện-virgil-dobjanschi-phần còn lại). – Zakaria

+2

Xin chào Zakaria, tôi đã tìm thấy ví dụ đó một tuần trước, nhưng việc thực hiện rất bẩn của mẫu đó. Nó tạo ra một Contentprovider khác để xử lý REST thay vì một dịch vụ. Cảm ơn bạn đã trả lời của bạn mặc dù nhưng im tìm kiếm việc thực hiện đầy đủ các mô hình như mô tả trong hình ảnh. @John http://www.youtube.com/watch?v=xHXn3Kg2IQE – Sam

Trả lời

20

Trong hiểu biết của tôi mô hình là:

  • Không hiển thị một hoạt động rỗng và tải các nội dung ở chế độ nền. Khi tải không thành công, bạn không thể hiển thị bất cứ điều gì.
  • Thay vào đó hiển thị dữ liệu được lưu trữ trong db có thể truy cập thông qua nhà cung cấp nội dung và bộ điều hợp - điều này đảm bảo rằng người dùng luôn nhìn thấy nội dung
  • Trong nền tìm nạp dữ liệu mới, khi dữ liệu đang hoạt động trên điện thoại thông qua adapter

Để câu hỏi của bạn (tôi đã thay đổi thứ tự):

ở đâu để tôi kêu gọi các helper dịch vụ?
Tôi chọn mẫu A từ trò chuyện của Vigils. Trong trường hợp đó, cuộc gọi phụ thuộc vào ứng dụng của bạn. Bạn có thể kích hoạt cập nhật khi ứng dụng bắt đầu, khi hoạt động được tạo hoặc khi người dùng chọn nút cập nhật. Tôi sẽ chọn tạo hoạt động.

Bạn đã chọn mẫu B. Trong trường hợp đó, rõ ràng là nhà cung cấp nội dung phải kích hoạt cập nhật. Khi nào? Để nhận dữ liệu mới: tại thời điểm tạo hoặc sau lần truy cập đọc đầu tiên. Tôi sẽ sử dụng thời gian tạo. Để tạo, cập nhật, xóa sau hành động tương ứng trong nhà cung cấp nội dung của bạn.

Có ví dụ hay về mẫu thiết kế chính xác này không?
Từ bài đăng của tôi tại https://stackoverflow.com/a/8693919/734687: triển khai tham chiếu nguồn mở duy nhất mà tôi biết có sẵn theo http://datadroid.foxykeep.com. Nó là một thư viện mà bạn có thể sử dụng trong ứng dụng của riêng bạn. Kiến trúc được giải thích dưới/thuyết trình - đảm bảo bạn đọc nó.

trình trợ giúp dịch vụ cần làm gì chính xác?
Nếu bạn nhìn vào slides tại trang trình bày 19, nó là một singleton đóng gói cuộc gọi đến dịch vụ và xử lý các cuộc gọi không đồng bộ thông qua các id yêu cầu.

dịch vụ cần làm gì chính xác?
Dịch vụ (trang trình bày 17 trong bản trình bày) chỉ đảm bảo rằng hành động được thực hiện trong nền.

+0

Tuyên bố của Datadroid là triển khai tùy chọn A, không phải tùy chọn B. Có nhầm không? – Estel

+0

@Estel Có bạn đã đúng. đó là triển khai tùy chọn A – Foxykeep

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