3.4.1 Sử dụng CSDL SQLite
CSDL SQLite của ứng dụng bao gồm 2 bảng:
Bảng TUVUNG dùng để chứa các thuộc tính của từ vựng.
o ID:Mã của từ vựng
o TUVUNG:Tiếng Anh của từ vựng.
o DUNG:Số lần nhập đúng đáp án của người dùng.
o LINK:Đường dẫn đến hình ảnh minh họa trên web service
o TIENGVIET:Nghĩa tiếng việt của từ vựng.
o MACD:Mã chủ đề của từ vựng.
o DONGBO:Kiểm tra xem từ vụng này đã được đồng bộ lên web service hay chưa.
Bảng CHUDE chứa các chủ đề của từ vựng
o MACD:Mã chủ đề của từ vựng.
o TENCD:Tên chủ đề của từ vựng.
Android cung cấp một lớp SQLiteOpenHelper giúp các lập trình viên có thể tao tác với CSDL SQLite. Lớp này cần override 2 phương thức: onCreate() và onUpgrade() để quản lý việc tạo CSDL và version của CSDL đó.
CSDL SQLite của ứng dụng đã được tạo sẵn và nằm trong thư mục assets của trò chơi.Việc đầu tiên cần làm là đưa CSDL này vào thư mục databases của trò chơi, nơi mà lớp SQLiteOpenHelper sẽ quản lý các CSDL SQLite.
Android cung cấp một số phương thức giúp việc thao tác với CSDL SQLite được thuận tiện và nhanh chóng,dưới đây là một số phương thức tiêu biểu được sử dụng trong ứng dụng:
query():Đây là phương thức thường được sử dụng nhất,nó thích hợp cho các câu truy vấn đơn giản với một bảng và một vài điều kiện truy vấn. Kết quả trả về là một đối tượng cursor.
51
update():Phương thức cập nhật CSDL với tham số thứ 2 là một đối tượng content values chứa các cặp giá trị gồm key và value,các cặp giá trị này có thể có nhiều kiểu dữ liệu khác nhau tương ứng với các giá trị trong CSDL SQLite.Kết quả trả về là một số nguyên kiểu int cho biết số dòng được cập nhật.
delete():Phương thức xóa các dòng trong SQLite với kết quả trả về là một số nguyên kiểu int cho biết số dòng bị xóa.
insert():Đây cũng là một phương thức được sử dụng phổ biến trong SQLite,nó cũng sử dụng một đối tượng content values như phương thức update.
drawQuery():Đây là phương thức thực hiện các câu lệnh SQL chuẩn trong SQLite, nó thích hợp dùng để truy vấn với nhiều bảng và điều kiện ràng buộc.Kết quả trả về là một đối tượng cursor.
Cursor trong SQLite:Là một đối tượng lưu trữ dữ liệu kiểu con trỏ với nhiều kiểu dữ liệu khác nhau, được lưu dữ dưới dạng key và value.
Các phương thức này sẽ được sử dụng để truy vấn và cập nhật CSDL SQLite khi ứng dụng hoạt động.
3.4.2 Đăng ký Broadcast Receiver
Như đã nói ở trên Broadcast Receiver là một trong những thành phần quan trọng của một ứng dụng Android.Broadcast Receiver dùng để nhận các intent từ hệ thống hoặc trao đổi dữ liệu giữa hai hay nhiều ứng dụng.
Một ứng dụng muốn nhận được các thông tin từ hệ thống nó phải đăng ký sử dụng Broadcast Receiver, đăng ký có hai cách:
Đăng ký ngay trong coding: Cách này ít được dùng vì chỉ khi ứng dụng mở lên nó mới nhận các thông tin từ hệ thống, khi ứng dụng tắt đi thì nó cũng không nhận được nữa.
Đăng ký trong AndroidMaintifest.xml: Cách này được sử dụng rất nhiều, với cách đăng ký này ngay cả khi ứng dụng đang tắt nó vẫn có thể nhận được thông tin từ hệ thống, khi nhận được thông tin nó lập tức khởi động ứng dụng.
Trò chơi sẽ đăng ký một Broadcast Receiver nhận thông tin về kế nối mạng của thiết bị.
3.4.3 Xử lý đa tiến trình bằng AsyncTask
AsyncTask là một class được cung cấp sẵn trong Android, giúp cho các thread chạy ngầm mà vẫn dễ dàng giao tiếp với giao diện người dùng thông qua các hàm cung cấp sẵn.
Class này cho phép thực hiện công việc bất đồng bộ lên giao diện người dùng.Nó thực hiện thao tác khóa trong luồng con và sau đó tiếp nhân kết quả lên thread chính chạy trên giao diện người dùng.
Để sử dụng ta cần tạo ra một class kế thừa từ class AsyncTask sau đó thực thi hàm doInBackground(). Để cập nhật giao diện ta cần thực thi hàm onPostExecute(), hàm này chuyển kết quả từ doInBackground và chạy trên thread chính trên giao diện người dùng. Class này được chạy bằng cách gọi execute() từ thread chính, khi thực thi phương thức execute() nó sẽ gọi hai hàm doInBackground() và onPostExecute().
52
Trong AsyncTask<Params, Progress, Result> có 3 đối số là các Generic Type:
Params:Là giá trị (biến) được truyền vào khi gọi thực thi tiến trình và nó sẽ được truyền vào doInBackground().
Progress: Là giá trị (biến) dùng để update giao diện diện lúc tiến trình thực thi, biến này sẽ được truyền vào hàm onProgressUpdate.
Result:Là biến dùng để lưu trữ kết quả trả về sau khi tiến trình thực hiện xong.
Những đối số nào không sử dụng trong quá trình thực thi tiến trình thì ta thay bằngVoid. Thông thường trong 1 AsyncTask sẽ chứa 4 hàm, đó là :
onPreExecute() : Tự động được gọi đầu tiên khi tiến trình được kích hoạt.
doInBackground(): Được thực thi trong quá trình tiến trình chạy nền, thông qua hàm
này để ta gọi hàm onProgressUpdate để cập nhật giao diện (gọi lệnhpublishProgress). Ta không thể cập nhật giao diện trong hàm doInBackground().
onProgressUpdate ():Dùng để cập nhật giao diện lúc runtime
onPostExecute(): Sau khi tiến trình kết thúc thì hàm này sẽ tự động sảy ra. Ta có thể
lấy được kết quả trả về sau khi thực hiện tiến trình kết thúc ở đây.
Trong 4 hàm trên thì hàm doInBackground() bắt buộc phải tồn tại, còn các hàm khác có thể khuyết.
Trong ứng dụng thì AsyncTask dùng để tải hình ảnh minh họa, gửi và nhận dữ liệu giữa ứng dụng và web service.
3.4.4 Tùy biến ListView trong Android
Listview là một trong những thành phần được sử dụng phổ biến nhất trong ứng dụng Android. ListView mặc định được hỗ trợ trong Android SDK rất đơn giản khiến cho việc hiển thị dữ liệu đôi khi trở nên nhàm chán. Danh sách dữ liệu cần được trình bày một cách trực quan và lôi cuốn hơn.
Dưới đây là một trong những listview đã được tùy biến lại trong ứng dụng
Hình 3.4.4.1 Tùy biến listview trong Android
Để làm được điều trên thì ta phải kế thừa class ArrayAdapter và override phương thức getview().
TextView
53
3.4.5 Kết nối với CSDL MySql.
Để có thể kết nối ứng dụng với CSDL MySql ta cần một web service chạy bằng PHP. Ứng dụng sẽ mở một kết nối URLconnection đến tên miền http://nam01678.5gbfree.com/HTV/, đồng thời truyền các tham số cần thiết với phương thức Post để web service trả về kết quả. Nếu không có lỗi xảy ra về kết nối hay các ngoại lệ khác thì ứng dụng sẽ nhận được một chuỗi đã được định dạng theo kiểu Json.
Chuỗi này sau đó sẽ được tách ra và lấy các giá trị cần thiết để ứng dụng xử lý với CSDL SQLite cũng như cập nhật lại giao diện cho trò chơi.Toàn bộ quá trình này được thực hiện bằng xử lý đa tiến trình AsyncTask nhầm đảm bảo tính đồng bộ cho toàn bộ thao tác gửi và nhận dữ liệu của ứng dụng.
Do có sử dụng và kiểm tra kết nối internet nên ứng dụng cần khai báo các quyền truy cập này trong tập tin AndroidManifest.xml của ứng dụng.
3.4.6 Sử dụng Shared Preferences trong Android.
Android cung cấp interface này để giúp lưu trữ dữ liệu trong quá trình chạy của ứng dụng. Interface này giúp chúng ta truy xuất và thay đổi các preference bằng hàm getSharedPreferences().
Lớp shared preferences cung cấp một framework giúp lưu trữ và đọc lên những cặp key- value liên tục dữ liệu đơn giản. Có thể dùng shared preferences với những kiểu dữ liệu như: booleans, floats, ints, longs, strings.
Để đơn giản hóa việc lưu trữ thông tin của người dùng cũng như các cài đặt của ứng dụng thì shared preferences là cách hiệu quả nhất,ứng dụng sử dụng shared preferences để lưu trữ các thông tin của người dùng như email, mật khẩu, điểm, cài đặt nút...
3.5 KẾT QUẢ ĐẠT ĐƯỢC.
Ứng dụng là một trò chơi đơn giản về thiết kế giao diện cũng như cách chơi.Với dung lượng sau khi đóng gói nhỏ hơn 10MB và chiếm dụng rất ít bộ nhớ giúp trò chơi có thể chạy được trên nhiều dòng máy cấu hình thấp với những chức năng chính như:
Cho phép học từ vựng bằng chọn nhiều chủ đề khác nhau trong kho từ vựng của ứng dụng
Đa dạng về các chủ đề của từ vựng và có thể bổ sung thêm sau này.
Trò chơi cũng cũng cho phép người dùng tự nhập những từ vựng mà học muốn học do đó phần nào khắc phục được tình trạng thiếu hụt từ vựng của ứng dụng. Cho phép người dùng xem lại những từ mà mình đã học được.
Tìm kiếm và kết bạn với những người dùng khác.
Xem bảng xếp hạng những người dùng xuất sắc nhất, cũng như bảng xếp hạng bạn bè
Người dùng cũng có thể thay đổi kiểu nút của trò chơi dựa theo số điểm mà người dùng đạt được.
Nếu người dùng đã đăng nhập thì ứng dụng sẽ tự động sao lưu dữ liệu người dùng lên web service, để khi người dùng đổi máy hoặc sử dụng trên nhiều thiết bị thì dữ liệu không bị mất đi. Do đó người dùng sẽ không cần phải chơi lại những từ vựng mà mình đã đạt được.
54
Những hình ảnh trong trò chơi.
Hình 3.5.1 Những hình ảnh trong trò chơi
3.6 NHỮNG VẤN ĐỀ CÒN LẠI
Trò chơi chưa thực sự hấp dẫn vì chỉ có một màn chơi, ít hiệu ứng bắt mắt. Do đó, để thu hút được nhiều người dùng thì cần phải cải tiến thêm về chức năng cũng như nội dung của ứng dụng như:
Tính năng chia sẽ điểm của người dùng lên mạng xã hội.
Cho phép người dùng tải trước ảnh minh hoạ để có thể chơi offline. Phân chia nhiều mức độ chơi từ dễ đến khó...
Tính năng cho phép người dùng đóng góp vào kho từ vựng của ứng dụng
55
KẾT LUẬN VÀ ĐỀ NGHỊ
Đề tài này được đưa ra nhầm nghiên cứu các kiến thức về hệ điều hành Android như lịch sử phát triển,kiến trúc hệ điều hành Android,những công cụ và môi trường phát triển ứng dụng Android.
Qua đó áp dụng các kiến thức này vào quá trình lập trình ứng dụng trò chơi học từ vựng trên Android. Kết quả đạt được là một ứng dụng có giá trị sử dụng thực tiễn trong đời sống chạy được trên các thiết bị Android cũng như tích lũy thêm kiến thức và kinh nghiệm cho chính bản thân.
Tuy ứng dụng đã được phát triển gần hoàn chỉnh, nhưng đó chỉ là một ứng dụng đơn giản trong Android.Để phát triển lên các ứng dụng cao cấp hơn,nhiều chức năng hơn,áp dụng các hàm API cao cấp mà hệ điều hành cung cấp thì đòi hỏi lập trình viên phải không ngừng học hỏi,mài mò,nghiên cứu những công nghệ mới,những thành tựu mới,qua đó cho ra đời những ứng dụng chất lượng và có giá trị sử dụng cao nhầm phục vụ nhu cầu ngày càng cao của người dùng di động.
Học từ vựng chỉ là một ứng dụng nhỏ trong hàng triệu ứng dụng được phát triển cho hệ điều hành Android, nhưng nếu được phát triển theo một hướng đúng đắn thì ứng dụng này có khả năng thu hút nhiều người dùng hơn nữa.
Một số chức năng có thể phát triển thêm như:
Tăng số lượng từ vựng lên ngang bằng với một ứng dụng từ điển thay vì chỉ gói gọn trong hơn 1000 từ vựng mà đề tài này phát triển.
Liên kết người dùng với nhau bằng mạng xã hội.
Cho phép người dùng đóng góp từ vựng vào kho từ vựng của ứng dụng.
Thêm nhiều chế độ chơi khác nhau để đa dạng cách chơi giúp người dùng có nhiều lựa chọn trong ứng dụng.
Khi ứng dụng đã thu hút một số lượng người dùng nhất định thì có thể thêm quảng cáo để giúp lập trình viên có thu nhập từ ứng dụng, nhưng không quá lạm dụng để tránh gây khó chịu cho người dùng.
56
PHỤ LỤC:CÁC PHẦN MỀM SỬ DỤNG TRONG ĐỀ TÀI
Android Studio tích hợp Android SDK:Phần mềm trực tiếp hỗ trợ việc lập trình ứng dụng Android
Microsoft Excel 2013:Lưu trữ dữ liệu để đưa vào SQLite. FileZilla 3.9.0.3:Upload file ảnh lênh webserver.
SQLiteBrowser 3.3.1:Trình biên tập CSDL SQLite.
Caesium 1.7.0:Phần mềm chuyển đổi định dạng,thay đổi kích thước ảnh và nén dung lượng ảnh để ứng dụng có thể tải ảnh nhanh hơn.
English Study Pro 2012:Phần mềm từ điển cung cấp hơn 1000 từ vựng cho ứng dụng.
Photoshop CS6:Phần mềm xử lý ảnh dùng để tạo icon và các biểu tượng cho ứng dụng
Notepad++:Trình xử lý văn bản được dùng trong việc lập trình php cho web service.
57
TÀI LIỆU THAM KHẢO
[1] Ths Trương Thị Ngọc Phượng.Lập trình Android.nhà xuất bản Thời đại,2012
[2] Trần Vũ Tất Bình.Hướng dẫn cơ bản lập trình Android [3] Bách khoa toàn thư Wikipedia.com.
http://vi.wikipedia.org/wiki/Android http://vi.wikipedia.org/wiki/SQLite
http://vi.wikipedia.org/wiki/L%E1%BB%8Bch_s%E1%BB%AD_c%C3%A1c _phi%C3%AAn_b%E1%BA%A3n_Android
[4] Diễn đàn khoa học công nghệ Tinhte.vn
https://www.tinhte.vn/
[5] Thư viện mã nguồn mở megacode.vn
http://megacode.vn/ [6] Google Android Developer
http://developer.android.com/ [7] Giới thiệu PHP
http://www.qhonline.info/php-can-ban/13/bai-1--gioi-thieu--cau-hinh-va-cai- dat-php.html
[8] Chiển Phong,Khái niệm cơ bản về Json.
https://chienphong.wordpress.com/2011/11/08/khai-ni%E1%BB%87m- c%C6%A1-b%E1%BA%A3n-v%E1%BB%81-json/
[9] SQLite Hệ quản trị CSDL Portable,
http://diendan.congdongcviet.com/threads/t30160::sqlite-he-quan-tri-co-so-du- lieu-portable.cpp
[10] SQLite Kiến thức cơ bản
http://www.bigdata.com.vn/2012/12/sqlite-kien-thuc-co-ban-phan-1.html [11] Duy Thanh cse,Xử lý đa tiến trình bằng AsynTask
https://duythanhcse.wordpress.com/2013/10/25/bai-37-xu-ly-da-tien-trinh- bang-asynctask/