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 kết hợp DB

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

Part 3: Kết nối và thao tác lưu trữ dùng cơ sở dữ liệu với Android sử dụng trên thiết bị di động

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

Mục đích: Tiếp nối chủ đề đã trình bày ở phần 2 (http://www.kieutrongkhanh.net/2016/09/tao-ung-dung-mobile-thuc-hien-quan-ly.html ), chúng ta đã làm một ứng dụng quản lý chi tiêu cá nhân, tuy nhiên ứng dụng này chỉ mới lưu trữ trên bộ nhớ, sẽ bị mất khi tắt ứng dụng. Do đó ở phần này, chúng tôi sẽ giới thiệu cách thức thao tác, kết nối lưu trữ dữ liệu trong và sau khi thao tác các tác vụ sử dụng cơ sở dữ liệu (CSDL) SQLite trên Android.

Part 2: Kết nối và thao tác lưu trữ dùng cơ sở dữ liệu với Android sử dụng trên thiết bị di động

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

Mục đích: Tiếp nối chủ đề đã trình bày ở phần 2 (http://www.kieutrongkhanh.net/2016/09/tao-ung-dung-mobile-thuc-hien-quan-ly.html ), chúng ta đã làm một ứng dụng quản lý chi tiêu cá nhân, tuy nhiên ứng dụng này chỉ mới lưu trữ trên bộ nhớ, sẽ bị mất khi tắt ứng dụng. Do đó ở phần này, chúng tôi sẽ giới thiệu cách thức thao tác, kết nối lưu trữ dữ liệu trong và sau khi thao tác các tác vụ sử dụng cơ sở dữ liệu (CSDL) SQLite trên Android.

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ề layout, activity trong Android. http://www.kieutrongkhanh.net/search/label/Android

·         Biết cách sử dụng List control và Adapter trong Android

·         Biết cách tạo table, sử dụng 1 số câu lệnh select, insert, update, delete với SQL

Yêu cầu

·         JDK 6 Update 22

·         Eclipse đã cài đặt Android SDK.

Giới thiệu về hệ quản trị CSDL SQLite

·         SQLite là 1 hệ CSDL nhỏ gọn, hoàn chỉnh, không cần cấu hình.

·         SQLite khá gọn nhẹ với kích thước chỉ 300KB, toàn bộ database chỉ được lưu trữ dưới một file duy nhất.

·         Vì SQLite được lập trình bằng C nên SQLite chạy khá nhanh, không tốn phần cứng. Do đó, SQLite được sử dụng trên các hệ thống nhúng, hệ thống di động v….v.

·         Quý vị có thể tìm hiểu thêm về SQLite ở đây: http://www.sqlite.org/

·         Vì khá nhỏ gọn, SQLite không hỗ trợ toàn bộ các kiểu dữ liệu như MySQL, Microsoft SQL Server mà chỉ hỗ trợ 5 kiểu dữ liệu: Null, Integer, Real, Text, Blob. Để sử dụng các kiểu dữ liệu như Boolean, Date,… quý vị có thể tìm hiểm thêm ở đây: http://www.sqlite.org/datatype3.html

·         Câu lệnh SQL khi truy vấn SQLite không có gì khác câu lệnh SQL thông thường. Để đơn giản, chúng ta sẽ tạo một bảng chỉ gồm 3 field (id, time, description) để lưu trữ.

·         Để tạo database lưu trữ, chúng ta cần kế thừa class SQLiteOpenHelper, override lại một số hàm sau:

o   SQLiteOpenHelper (Context context, String name, CursorFactory factory, int version): Ở hàm này, chúng ta truyền tên database khởi tạo, cùng với version. Mỗi khi muốn thay đổi cấu trúc database, ta phải tăng version đưa vào.

o    onCreate: Hàm này được gọi khi database được tạo mới. Trong hàm này, ta cho chạy câu lệnh SQL tạo ra các bảnh.

o   onUpgrade: Hàm này được gọi khi ta tăng version đưa vào. Trong hàm này, ta drop các bảng, chạy lại hàm onCreate để khởi tạo bảng

·         Để thực hiện các thao tác xử lý database, ta sử dụng một object của class SQLiteDatabase, một số hàm của object này:

o   execSQL (String sql) hoặc execSQL (String sql, Object[] bindArgs): Ta có thể thực hiện insert, update, delete bằng cách truyền vào câu lệnh SQL cho hàm này, tuy nhiên Android khuyến cáo không nên dùng hàm này mà dùng các hàm khác (phía dưới).

o   rawQuery (String sql, String[] selectionArgs): Đưa SQL vào để thực hiện câu lệnh select, các tham số truyền vào query được đưa vào array selectionArgs.

o   query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy): Đưa vào tên bảng và các giá trị để query, filter. Trong trường hợp chỉ query thông thường, chỉ cần đưa vào tên bảng cần query, các giá trị khác để null

o   insert (String table, String nullColumnHack, ContentValues values): Insert 1 giá trị vào bảng. Cách sử dụng class ContentValues sẽ được nhắc đến phía dưới bài viết.

o   update (String table, ContentValues values, String whereClause, String[] whereArgs): Update giá trị trong bảng, ta cần truyền vào đúng whereClause và tham số whereArgs.

o   delete (String table, String whereClause, String[] whereArgs): Delete 1 giá trị trong bảng

·         Quý vị có thể thực hiện mọi thao tác thêm bớt xóa sửa chỉ với 2 hàm execSQL và rawQuery, sử dụng câu lệnh SQL như bình thường. Những hàm còn lại thì chỉ cần truyền vào tham số, câu lệnh SQL sẽ tự sinh ra. Theo khuyến cáo của API thì chúng ta nên dùng cái hàm query, insert, update, delete do API cung cấp.

·         Để làm việc với SQLite, quý vị tải plugin của Eclipse về tại đây http://www.coderzheaven.com/2011/04/18/sqlitemanager-plugin-for-eclipse/

o   Cho file jar vào thư mục eclipse/dropins/, sau đó khởi động lại Eclipse

o   Chúng ta tiếp tục quay lại với bài demo, chúng ta tạo 1 package mới, chứa các class liên hệ với database.

o   Ta tạo 1 class có tên DatabaseUtils

·         Ta có thể tách riêng class TimeTrackerOpenHelper ra file riêng, tuy nhiên ta nên để nó là private class của DatabaseUtils để có thể dùng chung 1 số hằng số như tên bảng, tên cột…..

·         Hàm onCreate chạy được chạy lần đầu, khi database chưa được khởi tạo. Ở hàm này, ta cho database truyền câu lệnh SQL để tạo bảng.

·         Ta bắt đầu gọi DatabaseUtils trong MainActivity.

·         Chạy chương trình. Quý vị làm các bước sau để mở thêm tab FileExplorer

·         Quý vị tìm file database tại data/data/<tên package lúc khởi tạo ứng dụng>/databases/

·        

·         Quý vị click vào file TimeTracker.db, bấm vào icon database màu xanh phía trên (Nếu không thấy icon này, quý vị vui lòng cài plugin ở đầu bài viết)

·         Chúng ta đã tạo database thành công. Tuy nhiên, trong database vừa tạo, chúng ta thiếu cột amount, ta sẽ sửa lại câu lệnh SQL, đồng thời tách tên bảng, cột ra thành các hằng số của class DatabaseUtils

·         Lưu ý: Khi muốn cập nhật cấu trúc database, ta phải tăng giá trị Database Version, để hàm onUpgrade được chạy, xóa database cũ, thay database mới.

·         Chạy lại chương trình, ta được

Cập nhật Ứng dụng đã viết trong phần 02

·         Tiếp theo, chúng ta sẽ viết 1 số hàm thêm bớt xóa sửa với SQLite đã tạo. Ở đây, tôi sử dụng phối hợp API của android và SQL tương ứng (trong comment) cho quý vị dễ theo dõi.

·         Chúng ta tiếp tục sửa lại class TransactionAdapter, xóa những hàm gạch đỏ

·         Bổ sung thêm DatabaseUtils trong MainActivity. Ta sẽ lấy các transaction từ database để set cho adapter.

·         Ta viết hàm reloadTransaction. Mỗi khi user thêm bớt xóa sửa, ta sẽ xử lý dưới database, sau đó load lên lại chứ không xử lý trong bộ nhớ như trước

·         Ta tiếp tục sửa phần xử lý khi người dùng bấm Save, Delete

·         Chạy chương trình, ban đầu ta có

Description: C:\Users\Hoang\Desktop\blank.JPG

·         Bấm Add và thêm một số transaction, bấm save.

·         Click vào transaction đầu tiên, edit thông tin.

·         Xem dữ liệu trong database

·         Lưu ý: database không tự refresh, khi có thay đổi trong database, quý vị phải bấm lại vào file TimeTracker.db, bấm vào kí tự database góc trên bên phải để xem db mới.

·         Do dữ liệu đã được lưu trữ trong database, khi tắt app bật lại, dữ liệu vẫn còn. Khi ta bấm button Clear.

Description: C:\Users\Hoang\Desktop\blank.JPG

 

Chúc mừng quý vị đã hoàn thành phần 3 của bài hướng dẫn. Ở phần tiếp theo, chúng ta sẽ tìm hiểu cách sử dụng Action của Struts2 để làm Restful Web Service, cũng như consume Web Service bằng thư viện Http Apache đã được tích hợp sẵn trong Android.

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

Đăng nhận xét