2012-07-02 48 views
48

Tôi đang phát triển một ứng dụng Android lưu trữ các loại dữ liệu khác nhau trong SQL Light tích hợp do Nền tảng Android cung cấp.Làm thế nào để đồng bộ hóa cơ sở dữ liệu Android với một máy chủ SQL trực tuyến?

Bên trong ứng dụng Tôi đã đặt nút "Đồng bộ hóa" được cho là Đồng bộ hóa dữ liệu giữa Cơ sở dữ liệu SQL cục bộ với cơ sở dữ liệu Máy chủ SQL trực tuyến trên máy chủ của tôi.

Giải pháp khắc phục sự cố này là gì? Bạn có thể tìm thấy tính năng này trong Lịch Google, nơi bạn có thể xem các sự kiện trên lịch trên thiết bị di động của mình và khi bạn thêm sự kiện mới và Đồng bộ hóa dữ liệu, bạn có thể xem dữ liệu cập nhật bằng cách truy cập vào tài khoản trực tuyến của mình.

Lưu ý: Tôi không muốn tập trung trực tuyến cơ sở dữ liệu của mình, vì tôi cũng muốn cung cấp cho người dùng điện thoại khả năng sử dụng Ứng dụng mà không cần kết nối internet.

Cảm ơn.

+2

Viết Webservice và nhận dữ liệu cập nhật từ dịch vụ và cập nhật cơ sở dữ liệu sqllite của bạn ..vào lại –

+0

Tôi đã sử dụng PHP để viết một dịch vụ web trong quá khứ. Tùy thuộc vào việc triển khai của bạn, bạn có thể chỉ muốn đưa ra các sự kiện mới và đặt chúng vào db sqlite của bạn hoặc thêm/xóa/sửa đổi. Cách tốt nhất/duy nhất là viết một webservice làm middleware để giao tiếp giữa ứng dụng và backend của bạn! – javajavajava

+0

bạn có đang đồng bộ hóa giữa sqllite và máy chủ mysql không? – morty346

Trả lời

60

Bạn nên xem dự án SampleSyncAdapter trong bản trình diễn SDK Android (Transferring Data Using Sync Adapters). Nó cho bạn thấy làm thế nào để làm đồng bộ hóa "phong cách Android", mà không yêu cầu phải tương tác người dùng bằng cách khai thác bằng tay một nút đồng bộ tất cả các thời gian.

Trên hết, bạn cần viết phần mềm máy chủ có thể cung cấp cho SyncAdapter của bạn một "delta" của tất cả các thay đổi kể từ lần commit cuối cùng. Cách tiếp cận cơ bản nhất là giữ một dấu thời gian "đồng bộ hóa cuối cùng" trong ứng dụng của bạn mà phải đến từ máy chủ, nếu không bạn có thể gặp rắc rối vì sự khác biệt về thời gian giữa máy khách và máy chủ. Bình thường hóa tất cả các dấu thời gian như GMT hoặc bất kỳ múi giờ nào bạn chọn, nhưng gắn bó với quyết định đó. Nếu ứng dụng của bạn cần hiển thị dấu thời gian theo giờ địa phương, thì bạn cần sử dụng lịch Java và lớp TimeZone để chuyển đổi dấu thời gian chuẩn hóa thành giờ địa phương.

Ứng dụng của bạn cũng cần gắn cờ các bản ghi thay đổi cục bộ là "bẩn", vì vậy SyncAdapter của bạn biết rằng cần phải tải lên các bản ghi đã thay đổi hoặc mới này lên máy chủ.

Tiếp theo tính năng tối thiểu cần thiết cho phần mềm máy chủ của bạn:

  • Cập nhật hiện kỷ lục (s) chức năng
  • Thêm kỷ lục mới (s) chức năng
  • Nhận hồ sơ được cập nhật kể từ khi đồng bộ hóa cuối cùng (ứng dụng cung cấp thời gian tem)
  • Nhận hồ sơ mới kể từ lần đồng bộ hóa cuối cùng (ứng dụng cung cấp tem thời gian)

Bạn cũng có thể muốn đọc qua một số API của Google (như Lịch Google) để biết ý tưởng về cách thức tất cả các công trình này hoạt động và cách thiết kế giao diện API máy chủ cho giao tiếp.

+0

Câu trả lời hoàn hảo! Cảm ơn rất nhiều. –

+6

[Liên kết đến mẫu.] (Http://developer.android.com/training/sync-adapters/index.html) – BRS

+1

@CodeZombie, được thêm vào câu hỏi – naXa

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