Thứ Sáu, 2 tháng 9, 2016

Tạo ứng dụng mobile thực hiện quản lý chi tiêu của cá nhân trên Android - Đồng bộ dữ liệu

Xây dựng một hệ thống ứng dụng sử dụng trên Web Site lẫn thiết bị di động. Ứng dụng này cho phép thiết bị di động kết nối Web Service để yêu cầu xử lý chức năng. Ngoài ra, ứng dụng có thể đồng bộ giữa thiết bị di động và Web Site

Phần cuối: Sử dụng web service để đồng bộ dữ liệu ở ứng dụng chạy trên mobile và server

Tác giả: Phạm Huy Hoàng

Mục đích: Tiếp nối chủ đề đã trình bày ở phần 4 (http://www.kieutrongkhanh.net/2016/09/tao-ung-dung-mobile-thuc-hien-quan-ly_47.html ), chúng tôi đưa ra nội dung cuối cùng trong loạt bài về ứng dụng từ cơ bản trên web site, đến mobile với mục đích sử dụng web service để đồng bộ thông tin giữa database ở client sử dụng ứng dụng mobile và database ở server thông qua web application server

Phần cuối: Sử dụng web service để đồng bộ dữ liệu ở ứng dụng chạy trên mobile và server

Tác giả: Phạm Huy Hoàng

Mục đích: Tiếp nối chủ đề đã trình bày ở phần 4 (http://www.kieutrongkhanh.net/2016/09/tao-ung-dung-mobile-thuc-hien-quan-ly_47.html ), chúng tôi đưa ra nội dung cuối cùng trong loạt bài về ứng dụng từ cơ bản trên web site, đến mobile với mục đích sử dụng web service để đồng bộ thông tin giữa database ở client sử dụng ứng dụng mobile và database ở server thông qua web application server

Yêu cầu về kiến thức cơ bản:

·         Nắm vững khái niệm về ngôn ngữ lập trình Java, lập trình thao tác hướng đối tượng .

·         Biết một số khái niệm cơ bản về Web Service, cách gửi nhận, bind dữ liệu tới Web Service.

·         Đã thực hiện đầy đủ và hiểu rõ 4 phần của loạt bài giới thiệu từ trước tới nay.

 

Trước tiên, chúng tôi giới thiệu tổng quan về cơ chế của việc đồng bộ như sau:

1.    User nhập username, password vào để login vào hệ thống.

2.    Toàn bộ những transaction trên server của user sẽ được lấy xuống, lưu dưới database SQLite dưới client.

3.    User thực hiện thêm bớt xóa sửa, thực hiện các thay đổi trên database offline.

4.    Khi đồng bộ, các thay đổi thêm bớt xóa sửa trên database offline sẽ được đồng bộ trên database online.

5.    Clear database offline, đồng bộ ngược những transaction ở database online về database offline.

Giới thiệu về Shared Preferences:

Hệ điều hành Android cung cấp cho chúng ta 1 số cách lưu trữ dữ liệu như:

·         Lưu trữ dữ liệu dưới dạng files

·         Lưu trữ bằng Shared Preferences

·         Lưu trữ bằng SQLite database

Trong đó, lưu trữ bằng Shared Preferences cho phép ta lưu trữ dữ liệu dưới dạng key-value, việc đọc và ghi thông qua Shared Preferences đơn giản và ngắn gọn hơn so với đọc từ file hoặc database. Shared Preferences thường được sử dụng khi lưu một số giá trị đơn giản, dưới dạng key-value. Ví dụ như Thời gian login, config của chương trình…

Thư mục Shared Preferences nằm cùng cấp với thư mục database, bên trong chứa 01 file xml. Quý vị có thể chọn file xml, bấm icon được khoanh đỏ phía trên để lấy file xml về máy để đọc

Thông tin chi tiết về shared preference, quí vị vui lòng tham khảo theo địa chỉ: www.developer.android.com/guide/topics/data/data-storage.html

Chúng ta bổ sung thêm một phần trong Service Action trên Server. Chúng ta thêm trường time (lưu ý cần tạo thêm getter/setter), cho phép client set thêm thời gian của transaction được tạo. Trường hợp client không gửi tham số time thì ta lấy thời gian hiện tại của hệ thống

Quý vị Clean & Build, chạy lại server.

Ta tiếp tục mở Eclipse, sửa đổi ứng dụng Android.

Chúng ta sửa file layout login.xml, thêm 1 button là Offline Mode như sau

Trong phần 4, với Activity MainActivityOnl, chúng ta insert, update, load... sử dụng web service. Với Activity MainActivity, chúng ta insert, update… trên SQLite.

Khi chương trình được chạy, ta sẽ chạy MainActivityOnl. Khi bấm vào button Offline Mode, ta sẽ chuyển sang MainActivity, hoạt động offline trên SQLite.

Bổ sung trong class MainActivity

Bổ sung event khi click vào button Offline Mode, chúng ta gọi intent tới MainActivity

Hiện giờ ứng dụng của chúng ta có sử dụng 3 activity, do đó ta cần khai báo các activity đã dùng trong Android Mainfest để không bị exception.

Chạy ứng dụng, chúng ta nhận được như hình bên dưới.

Bấm vào Offline Mode (Nếu database SQLite còn dữ liệu, quý vị bấm clear để xóa trắng)

Ta bổ sung thêm 2 function trong DatabaseUtils và ServiceUtils để hỗ trợ việc đồng bộ

Tương tự như hàm getAllTransaction, chỉ đổi câu lệnh SQL để lấy cả các transaction đã InActive.

Ta viết thêm class SyncUtils, cấu trúc project như sau.

Mỗi lần động bộ, chúng ta sẽ lưu thời gian đồng bộ xuống Shared Prefreferences. Ở lần đồng bộ tiếp theo, chúng ta chỉ lọc những transaction có thời gian chỉnh sửa (lastEdited) bằng hoặc lớn hơn lần đồng bộ cuối (lastSync).

Như đã nói ở bài trước, chúng ta dựa vào giá trị serverId để mapping giữa các transaction trên server và dưới client. Nếu transaction ở client bị xóa hay edit, ta cập nhật trên server dựa theo serverID. Nếu transaction có serverID = 0, tức là vừa được tạo dưới client, ta sẽ insert trên server.

Hàm syncTransaction gồm 2 bước.

Bước 1: Đồng bộ các thay đổi từ client lên server.

Bước 2: Load toàn bộ những transaction từ server xuống client.

Chúng ta bổ sung thêm việc syncData sau khi user bấm vào button Login.

Đến đây chương trình đã hoàn thành.

Chúng ta login vào tài khoảng hoangCute, xóa và tạo 03 transaction như trong hình

Sau đó login vào dưới mobile

Database dưới mobile sau khi login, quý vị chú ý giá trị server ID

Chúng ta thoát ứng dụng, vào lại, bấm vào Offline Mode

Ta thực hiện thêm 1 transaction, edit 1 transaction và xóa transaction 1

Database hiện tại, quý vị sẽ thấy transaction vừa tạo có serverID = 0, các transaction khác có lastEdtied thay đổi.

Thoát ứng dụng, vào lại và login, chúng ta nhìn thấy nội dung bên dưới

Trên Web

Chúc mừng quý vị đã hoàn thành xong toàn bộ nội dung của loạt bài đồng bộ. Sau khi hoàn thành bài viết này, quý vị đã có thể tạo nên 1 hệ thống ứng dụng web bao gồm: Web Site, Web Service, Android Application sử dụng Web Service.

Cách giải quyết đồng bộ chúng tôi đưa ra có ưu điểm: dễ hiện thực, chạy đúng với 01 server, nhiều client. Tuy nhiên, nó vẫn còn vài khuyết điểm:

·         Chưa giải quyết được tình trạng conflict (VD user sửa  transactions trên cả web lẫn client).

·         Lấy toàn bộ transaction từ server về, nếu nhiều sẽ làm giảm performance.

·         Với mỗi transaction thay đổi, ứng dụng phải gọi web service một  lần (quí vị có thể cải tiến ứng dụng bằng cách gọi service theo batch).

Chân thành cám ơn sự theo dõi của quí vị. Chúng tôi rất mong sự đóng góp chân thành của quí vị về loạt bài chủ đề này. Nếu quí vị có giải pháp hay hơn, dễ hiểu hoặc tối ưu hơn, quý vị vui lòng đóng góp cho chúng tôi.

Hẹn gặp quí vị ở một chủ đề khác tương tự.

 

Không có nhận xét nào:

Đăng nhận xét