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