Tải bản đầy đủ (.pdf) (266 trang)

Giáo trình lập trình thiết bị di động 2 (nghề ứng dụng phần mềm trình độ cao đẳng)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.24 MB, 266 trang )

TUYÊN BỐ BẢN QUYỀN
Tài liệu này thuộc loại sách giáo trình nên các nguồn thơng tin có thể được phép
dùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo.
Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh doanh
thiếu lành mạnh sẽ bị nghiêm cấm.


LỜI GIỚI THIỆU
Trong thập kỷ vừa qua, Android đã trở thành một nền tảng phổ biến hơn bao giờ
hết với hơn 1.4 tỷ người dùng và 80% số lượng thiết bị di động sử dụng hệ điều hành
Android. Con số ấn tượng này cũng cho thấy nhu cầu phát triển các ứng dụng chạy trên
hệ điều hành Android. Lập trình ứng dụng dần trở thành công việc với cơ hội nghề
nghiệp rộng mở và mức lương hấp dẫn.
Lập trình thiết bị di động 2 là một trong những mô đun cơ sở của nghề Ứng dụng
phần mềm được biên soạn dựa theo Bài trình đào tạo đã xây dựng và ban hành năm
2021 của trường Cao đẳng nghề Cần Thơ dành cho nghề Ứng dụng phần mềm hệ Cao
đẳng.
Khi biên soạn, nhóm biên soạn đã dựa trên kinh nghiệm thực tế giảng dạy, tham
khảo đồng nghiệp, tham khảo các giáo trình hiện có và cập nhật những kiến thức mới
có liên quan để phù hợp với nội dung Bài trình đào tạo và phù hợp với mục tiêu đào tạo,
nội dung được biên soạn gắn với nhu cầu thực tế.
Nội dung giáo trình được biên soạn với lượng thời gian đào tạo 45 giờ gồm có:
Bài 1 MĐ29-01: Lưu trữ dữ liệu – SQLITE
Bài 2 MĐ29-02: Quản lý dữ liệu với Content Provider
Bài 3 MĐ29-03: Menu - Action Bar - Toolbar
Bài 4 MĐ29-04: Action Provider, điều khiẻn tìm kiếm và các chuyển hoạt
Bài 5 MĐ29-05: Asynctask - Thread - Handler
Bài 6 MĐ29-06: Service - Broadcast Receiver và Notification
Bài 7 MĐ29-07: Khai thác tài nguyên internet và giao thức kết nối
Webservice
Bài 8 MĐ29-08: Thao tác với dữ liệu XML và JSON


Bài 9 MĐ29-09: Google Map và Google Cloud Messaging
Bài 10 MĐ29-10: Các điều khiển đa truyền thông
Bài 11 MĐ29-11: Telephone & Sms và bộ cảm biến
Mặc dù đã cố gắng tổ chức biên soạn để đáp ứng được mục tiêu đào tạo nhưng
khơng tránh được những thiếu sót. Rất mong nhận được sự đóng góp ý kiến của các
thầy, cơ và bạn đọc để nhóm biên soạn sẽ điều chỉnh hồn thiện hơn.
Cần Thơ, ngày tháng năm 2021
Tham gia biên soạn
1. Chủ biên Nguyễn Hoàng Vũ

2


MỤC LỤC
LỜI GIỚI THIỆU ......................................................................................................... 2
MỤC LỤC ...................................................................................................................... 3
GIÁO TRÌNH MÔN HỌC/MÔ ĐUN ......................................................................... 8
BÀI 1: LƯU TRỮ DỮ LIỆU – SQLITE ................................................................... 10
Mã BÀI: MĐ29-01....................................................................................................... 10
1. KHÁI NIỆM CƠ SỞ DỮ LIỆU (DATABASE CONCEPTS) ............................. 10
2. GIỚI THIỆU SQLITE .......................................................................................... 10
3. XÂY DỰNG CƠ SỞ DỮ LIỆU VỚI SQLITE .................................................... 11
3.1 Tạo Cơ sở dữ liệu ................................................................................................ 11
3.2 Mở Cơ sở dữ liệu ................................................................................................ 12
4. TRUY VẤN DỮ LIỆU ......................................................................................... 13
4.1 Truy vấn (Query) ................................................................................................ 13
4.1.1 Truy vấn với câu lệnh SQL .............................................................................. 13
4.1.2 Truy vấn với cú pháp hàm ............................................................................... 14
4.2 Quản lý ................................................................................................................ 15
4.2.1 Insert ................................................................................................................ 15

4.2.2 Update .............................................................................................................. 15
4.2.3 Delete ............................................................................................................... 16
5. SẮP XẾP DỮ LIỆU ............................................................................................. 16
5.1 Truy vấn sắp xếp ................................................................................................. 16
5.1.1 Tăng dần (ASCENDING) ................................................................................ 16
5.1.2 Giảm dần (DESCENDING)............................................................................. 16
5.2 Truy vấn gom nhóm ............................................................................................ 16
Bài tập của học viên .................................................................................................. 18
Hướng dẫn thực hiện................................................................................................. 18
Những trọng tâm cần chú ý....................................................................................... 26
Bài mở rộng và nâng cao .......................................................................................... 26
Yêu cầu đánh giá kết quả học tập ............................................................................. 26
BÀI 2: QUẢN LÝ DỮ LIỆU VỚI CONTENT PROVIDER .................................. 28
Mã BÀI: MĐ29 - 02..................................................................................................... 28
1. Giới thiệu Content Provider .................................................................................. 28
1.1. Content Provider ............................................................................................ 28
1.2 Lợi ích Content Providers............................................................................... 29
1.3 Kiến trúc Content Providers ........................................................................... 30
1.3.1. Data and Open Helper ................................................................................ 30
1.3.2. Contract ...................................................................................................... 30
1.3.3. Content Provider ......................................................................................... 30
1.3.4. Content Resolver ........................................................................................ 31
1.4 Content URI .................................................................................................... 31
1.5. ContentResolver ............................................................................................ 31
2. Xây dựng Content Provider cho ứng dụng ........................................................... 33
2.1 Vấn đề xây dựng ContentProvider ................................................................. 33
2.2 Authority & UriMatcher ................................................................................. 33
2.2.1 Authority:..................................................................................................... 34
2.2.2 UriMatcher: ................................................................................................. 34
3. TRUY VẤN DỮ LIỆU HỆ THỐNG VỚI CONTENT PROVIDER .................. 34

3


3.1. Các phương thức điều khiển Cursor ............................................................. 34
3.2 Truy vấn dữ liệu hệ thống .............................................................................. 35
Bài tập của học viên ..................................................................................................36
Hướng dẫn thực hiện .................................................................................................36
Những trọng tâm cần chú ý: ......................................................................................39
Bài mở rộng và nâng cao ...........................................................................................39
Yêu cầu đánh giá kết quả học tập ..............................................................................40
BÀI 3 : MENU - ACTION BAR - TOOLBAR .........................................................41
Mã BÀI: MĐ29 -03 ......................................................................................................41
1. MENU ...................................................................................................................41
1.1 Option Menu .................................................................................................. 41
1.2 Context Menu ................................................................................................. 42
1.3. PopUp Menu ................................................................................................. 45
2. ACTION BAR .......................................................................................................47
2.1 Giới thiệu ....................................................................................................... 47
2.2 Tạo ActionBar ................................................................................................ 49
2.3. Thao tác với ActionBar ................................................................................. 50
3. CHẾ ĐỘ ĐIỀU HƯỚNG ......................................................................................52
4. TOOLBAR ............................................................................................................53
4.1 Giới thiệu ....................................................................................................... 53
4.1 Tạo ToolBar ................................................................................................... 54
4.2 Thao tác với Toolbar ...................................................................................... 55
Bài tập của học viên ..................................................................................................56
Hướng dẫn thực hiện .................................................................................................56
Những trọng tâm cần chú ý: ......................................................................................69
Bài mở rộng và nâng cao ...........................................................................................69
Yêu cầu đánh giá kết quả học tập ..............................................................................70

BÀI 4 : ACTION PROVIDER, ĐIỀU KHIẺN TÌM KIẾM VÀ CÁC CHUYỂN
HOẠT............................................................................................................................71
Mã BÀI: MĐ29 - 04 .....................................................................................................71
1. ACTION PROVIDER ...........................................................................................71
2. ĐIỀU KHIỂN TÌM KIẾM ....................................................................................72
3. PROPERTY ANIMATION ..................................................................................75
4 VIEW ANIMATION .............................................................................................76
4.1 Tween Animation ........................................................................................... 76
4.2 Frame Animation ........................................................................................... 77
5. DRAWABLE ANIMATION ................................................................................78
Bài tập của học viên ..................................................................................................79
Hướng dẫn thực hiện .................................................................................................79
Những trọng tâm cần chú ý: ......................................................................................88
Bài mở rộng và nâng cao ...........................................................................................89
Yêu cầu đánh giá kết quả học tập ..............................................................................89
BÀI 5: ASYNCTASK - THREAD - HANDLER ......................................................90
Mã BÀI: MĐ29 - 05 .....................................................................................................90
1. THREAD VÀ MULTITHREADING ...................................................................90
1.1 Thread ............................................................................................................ 90
1.2 Multithreading ................................................................................................ 91
1.3 Main Thread và UI Thread, Worker Thread. ................................................. 91
4


1.4 Hiện tượng ANR trong Android. .................................................................... 92
2. ASYNCTASK ...................................................................................................... 93
3. Handler .................................................................................................................. 96
3.1 Giới thiệu ........................................................................................................ 96
3.2 Cách sử dụng Handler .................................................................................... 97
Bài tập thực hành của sinh viên ................................................................................ 98

Hướng dẫn thực hiện................................................................................................. 99
Những trọng tâm cần chú ý: ................................................................................... 100
Bài mở rộng và nâng cao ........................................................................................ 101
Yêu cầu đánh giá kết quả học tập ........................................................................... 101
BÀI 6: SERVICE - BROADCAST RECEIVER VÀ NOTIFICATION .............. 102
Mã BÀI: MĐ29 - 06................................................................................................... 102
1. SERVICE ............................................................................................................ 102
1.1 Giới thiệu ...................................................................................................... 102
1.2 Tạo Service ................................................................................................... 103
1.3 IntentService ................................................................................................. 105
2. BROADCAST RECEIVER ................................................................................ 106
2.1 Tạo BroadcastReceiver ................................................................................. 106
2.2 Đăng ký BroadcastReceiver ......................................................................... 106
3. NOTIFICATION ................................................................................................ 107
Bài tập thực hành của sinh viên .............................................................................. 110
Hướng dẫn thực hiện............................................................................................... 110
Những trọng tâm cần chú ý: ................................................................................... 139
Bài mở rộng và nâng cao ........................................................................................ 140
Yêu cầu đánh giá kết quả học tập ........................................................................... 140
BÀI 7: KHAI THÁC TÀI NGUYÊN INTERNET VÀ GIAO THỨC KẾT NỐI
WEBSERVICE .......................................................................................................... 141
Mã BÀI: MĐ29 - 07................................................................................................... 141
1. TỔNG QUAN TÀI NGUYÊN INTERNET....................................................... 141
1.1 Tài nguyên Internet trên thiết bị di động ...................................................... 141
1.2 Các vấn đề khi kết nối Internet ..................................................................... 141
1.3 Các hình thức kết nối Internet ...................................................................... 142
1.4 Lớp khai báo kết nối ..................................................................................... 142
1.4.1 Thực hiện kết nối Internet (HTTP) ............................................................ 143
1.4.2 Thực hiện kết nối Internet (HTTPS) ......................................................... 143
2 SỬ DỤNG DỊCH VỤ DOWNLOAD MANAGER ............................................ 144

2.1.Giới thiêu đích vụ Download Manager ........................................................ 144
2.2 Khai báo và sử dụng Download Manager .................................................... 144
2.3 Tùy chỉnh thông báo cho Download Manager ............................................. 145
2.4 Chỉ định nơi lưu trữ ...................................................................................... 146
2.5 Truy vấn nội dung tải trong DownloadManager .......................................... 147
3. DỊCH VỤ WEBSERVICE ................................................................................. 147
3.1 Giới thiệu Web Service ................................................................................ 147
3.2 Các chuẩn dịch vụ WEB............................................................................... 148
4 CÁC LOẠI WEBSERVICE ................................................................................ 148
4.1. Giao thức HTTP .......................................................................................... 148
4.2 SOAP ............................................................................................................ 151
4.3 REST ............................................................................................................ 152
5


4.4 RESTful Service .......................................................................................... 152
5. XÂY DỰNG ỨNG DỤNG KẾT NỐI DỊCH VỤ WEB RESTFUL ..................153
5.2 Khai báo và kiểm soát các yêu cầu kết nối .................................................. 153
5.2 Thực hiên kết nối ......................................................................................... 153
5.3 Truy xuất dữ liệu trả về ................................................................................ 154
Bài tập thực hành của sinh viên...............................................................................155
Hướng dẫn thực hiện ...............................................................................................155
Những trọng tâm cần chú ý: ....................................................................................160
Bài mở rộng và nâng cao .........................................................................................160
Yêu cầu đánh giá kết quả học tập ............................................................................160
BÀI 8: THAO TÁC VỚI DỮ LIỆU XML VÀ JSON .............................................162
Mã BÀI: MĐ29 - 08 ...................................................................................................162
1. Đọc ghi dữ liệu XML ..........................................................................................162
1.1 Định dạng XML ........................................................................................... 162
1.2 Đọc ghi dữ liêu XML ................................................................................... 162

1.2.1. Ghi dữ liêu XML...................................................................................... 162
1.2.2 Đọc dữ liệu XML ...................................................................................... 165
2. ĐỌC GHI DỮ LIỆU JSON .................................................................................166
2.1 Định dạng JSON .......................................................................................... 166
2.2 Đọc ghi dữ liệu JSON .................................................................................. 167
2.2.1 Ghi dữ liệu JSON ...................................................................................... 168
2.2.2 Đọc dữ liệu JSON ..................................................................................... 169
Bài tập thực hành của sinh viên...............................................................................173
Hướng dẫn thực hiện ...............................................................................................173
Những trọng tâm cần chú ý: ....................................................................................185
Bài mở rộng và nâng cao .........................................................................................185
Yêu cầu đánh giá kết quả học tập ............................................................................186
BÀI 9: GOOGLE MAP VÀ GOOGLE CLOUD MESSAGING ..........................188
Mã BÀI: MĐ29 - 09 ...................................................................................................188
1. GOOGLE PLAY SERVICE SDK ......................................................................188
2. GOOGLE MAPS ANDROID API ......................................................................189
2.1. Tạo dự án Google Maps (Google Maps project) ........................................ 189
2.2 Google Maps Android API Key .................................................................. 190
2.3 GoogleMap & Xây dựng Đối tượng ............................................................ 191
2.4 Đồ họa trên Google Map .............................................................................. 193
2.4.1. Marker: ..................................................................................................... 193
2.4.2. InfoWindow: ............................................................................................ 194
2.4.3. Shape: ....................................................................................................... 194
3. Giới thiệu Google Cloud Messaging ...................................................................197
4. CẤU HÌNH CHO GOOGLE CLOUD MESSAGING .......................................198
4.1 Đăng ký dịch vụ GCM ................................................................................. 198
4.2 Cấu hình mơi trường hoạt đơng cho GCM .................................................. 201
4.3 Chuẩn bị máy ảo với Google API: ............................................................... 201
4.4 Tạo Project để đăng ký GCM ...................................................................... 202
4.5 Sử dụng “backend” trong Android Studio ................................................... 203

Bài tập thực hành của sinh viên...............................................................................209
Hướng dẫn thực hiện ...............................................................................................209
Những trọng tâm cần chú ý: ....................................................................................217
6


Bài mở rộng và nâng cao ........................................................................................ 217
Yêu cầu đánh giá kết quả học tập ........................................................................... 217
BÀI 10: CÁC ĐIỀU KHIỂN ĐA TRUYỀN THÔNG ............................................ 219
Mã BÀI: MĐ29 - 10................................................................................................... 219
1. MEDIA PLAYER ............................................................................................... 219
1.1 Giới thiệu ...................................................................................................... 219
1.2 Xây dựng MediaPlayer Audio ...................................................................... 219
1.3 Xây dựng MediaPlayer Video ...................................................................... 220
1.4 Các điều khiển trên MediaPlayer ................................................................. 221
2. THU ÂM THANH VÀ HÌNH ẢNH (RECODING) .......................................... 222
3. CAMERA ........................................................................................................... 224
3.1 Điều khiển chụp hình với Camera ................................................................ 224
3.2 Lưu tập tin Media vào MediaStore ............................................................... 226
Bài tập thực hành của sinh viên .............................................................................. 227
Hướng dẫn thực hiện............................................................................................... 228
Những trọng tâm cần chú ý: ................................................................................... 243
Bài mở rộng và nâng cao ........................................................................................ 243
Yêu cầu đánh giá kết quả học tập ........................................................................... 243
BÀI 11: TELEPHONE & SMS VÀ BỘ CẢM BIẾN ............................................. 245
Mã BÀI: MĐ29 - 11................................................................................................... 245
1. TELEPHONE ..................................................................................................... 245
2. SMS 248
3. Giới thiệu sơ lược về cảm biến ........................................................................... 251
4. Lấy thông tin và điều khiển cảm biến ................................................................. 253

5 XỬ LÝ THÔNG TIN MỘT SỐ CẢM BIẾN ...................................................... 254
5.1 Accelerometer ............................................................................................... 254
5.2 Near Field Communacation Sensor (NFC) .................................................. 255
Bài tập thực hành của sinh viên .............................................................................. 257
Hướng dẫn thực hiện............................................................................................... 257
Những trọng tâm cần chú ý: ................................................................................... 263
Bài mở rộng và nâng cao ........................................................................................ 263
Yêu cầu đánh giá kết quả học tập ........................................................................... 263
TÀI LIỆU THAM KHẢO ........................................................................................ 266

7


GIÁO TRÌNH MƠN HỌC/MƠ ĐUN
Tên mơn học/mơ đun: LẬP TRÌNH THIẾT BỊ DI ĐỘNG 2
Mã môn học/mô đun: MĐ 29
Vị trí, tính chất, ý nghĩa và vai trị của mơ đun
 Vị trí: là mơ đun được bố trí giảng dạy dạy ngay từ đầu khóa học, trước khi học các
môn chuyên môn nghề như: Quản trị mạng, Quản trị cơ sở dữ liệu, Thiết kế Web
với ASP.NET, Lập trìnhọpython, Xây dựng phần mềm quản lý dữ liệu (Bán hàng/
Nhân sự/ Khách sạn),...
 Tính chất của mơ đun: là mơ đun bắt buộc thuộc chun mơn nghề của Bài trình
đào tạo Cao đẳng Ứng dụng phần mềm.
 Ý nghĩa và vai trị: Đây là mơn học cơ sở ngành của ngành ứng dụng phần mềm,
cung cấp cho sinh viên các kiến thức cơ bản về bảo mật hệ thống mạng để làm nền
tản cho việc bảo mật giải quyết các vấn đề cần thiết.
 Vai trị: Giáo trình “Lập trình thiết bị di động 2” nhằm cung cấp cho sinh viên
những kiến thức cơ bản về phương pháp và kỹ thuật đo lường các đại lượng vật lý.
Mục tiêu của môn học:
Sau khi học xong mô đun này học viên có năng lực

- Kiến thức:
 Truy xuất tài nguyên dùng chung trên thiết bị
 Xây dựng ứng dụng với cơ chế chia sẻ tài ngun
 Mơ hình tổ chức dữ liệu theo cấu trúc cơ sở dữ liệu
 Tối ưu hoá trải nghiệm người dùng với cơ chế sắp xếp bố cục giao diện,
chuyển hoạt và tuỳ chỉnh hiển thị điều khiển
 Tăng tốc ứng dụng với các luồng xử lý khác nhau
 Xây dựng chế độ làm việc ngầm cho ứng dụng
 Xây dựng ứng dụng theo mơ hình MVC
 Thiết lập nhận và gửi thông báo cho ứng dụng
 Một trường hợp kiểm thử không tốt (không thành cơng) là một trường hợp
mà khả năng tìm thấy những lỗi chưa biết đến là rất ít.
 Khai thác các dịch vụ Internet;
 Xây dựng ứng dụng bản đồ với Google Map;
 Sử dụng các bộ cảm biến và các bộ kết nối không dây;
 Xây dựng ứng dụng giải trí đa phương tiện;
 Kết nối với các hệ thống khác thông qua WebService.

- Kỹ năng:
 Triển khai truy xuất tài nguyên dùng chung trên thiết bị
 Xây dựng ứng dụng với cơ chế chia sẻ tài nguyên
 Triển khai tối ưu hoá trải nghiệm người dùng với cơ chế sắp xếp bố cục giao
diện, chuyển hoạt và tuỳ chỉnh hiển thị điều khiển
 Tăng tốc ứng dụng với các luồng xử lý khác nhau
 Xây dựng chế độ làm việc ngầm cho ứng dụng
 Xây dựng ứng dụng theo mơ hình MVC
 Thiết lập nhận và gửi thơng báo cho ứng dụng
 Khai thác các dịch vụ Internet;
8



 Xây dựng ứng dụng bản đồ với Google Map;
 Sử dụng các bộ cảm biến và các bộ kết nối khơng dây;
 Xây dựng ứng dụng giải trí đa phương tiện;
 Kết nối với các hệ thống khác thông qua WebService.
- Năng lực tự chủ và trách nhiệm:
 Nghiêm túc, tỉ mỉ trong việc tiếp nhận kiến thức.
 Chủ động, tích cực trong thực hành và tìm kiếm nguồn bài tập liên quan.
 Rèn luyện tính tổ chức, khoa học, hệ thống, chính xác, cẩn thận.
Nội dung của mơ đun:
Thời gian (giờ)
Thực
Số
hành, thí
Tên các bài trong mơ đun
Tổng Lý
Kiểm
TT
nghiệm,
số
thuyết
tra
thảo luận,
bài tập
1
Bài 1: Lưu trữ dữ liệu – SQLITE
8
2
6
2

Bài 2: Quản lý dữ liệu với Content
8
2
6
Provider
3
Bài 3: Menu - Action Bar - Toolbar
4
1
3
4
Bài 4 : Action Provider, điều khiẻn tìm
4
1
2
1
kiếm và các chuyển hoạt
5 Bài 5: Asynctask - Thread - Handler
8
1
7
6 Bài 6: Service - Broadcast Receiver và
4
1
3
Notification
7 Bài 7: Khai thác tài nguyên internet và
8
1
7

giao thức kết nối Webservice
8 Bài 8: Thao tác với dữ liệu XML và
8
1
6
1
JSON
9 Bài 9: Google Map và Google Cloud
8
2
6
Messaging
10 Bài 10: Các điều khiển đa truyền thông
8
2
6
11 Bài 11: Telephone & Sms và bộ cảm
7
1
5
1
biến
Tổng
75
15
57
3

9



BÀI 1: LƯU TRỮ DỮ LIỆU – SQLITE
Mã BÀI: MĐ29-01
Giới thiệu
Những ứng dụng cần sử dụng khối lượng dữ liệu lớn hơn, chúng ta sẽ cần cách lưu
trữ khác. Và đặc biệt là với dạng dữ liệu có cấu trúc, cần truy cập sau này theo dạng truy
vấn thì khơng gì thích hợp hơn cơ sở dữ liệu (Database)..
Trong phần này chúng ta cùng điểm qua về DAO (Data Access Object). DAO có
nhiệm vụ xử lý kết nối với Database để truy cập và chỉnh sửa dữ liệu. DAO cũng có
nhiệm vụ chuyển đổi từ đối tượng trong database thành đối tượng Java tương ứng.
Tuy nhiên sử dụng DAO không phải lúc nào cũng hợp lý. Đôi khi dùng trực tiếp
thẳng vào database, hoặc sử dụng Content Provider thì tốt hơn (vì đỡ phải tạo model)..
Mục tiêu:
- Trình bày được khái niệm cơ sở dữ liệu
- Hiểu và thực hiện được việc xây dựng cơ sở dữ liệu trên SQLITE
- Thực hiện được các truy vấn dữ liệu trên SQLITE
- Thực hiện được các sắp xếp trên cơ sở dữ liệu
- Có được tính chủ động, khoa học, cẩn thận, tỉ mỉ, chính xác.
Nội dung chính:
1. KHÁI NIỆM CƠ SỞ DỮ LIỆU (DATABASE CONCEPTS)
 Dữ liệu là những sự kiện có thể ghi lại được và có ý nghĩa.
 Một cơ sở dữ liệu (CSDL) là một tập hợp dữ liệu có liên quan với nhau, được lưu
trữ trên máy tính, có nhiều người sử dụng và được tổ chức theo một mơ hình.
 Một CSDL biểu thị một khía cạnh nào đó của thế giới thực. Thơng tin được đưa
vào trong CSDL tạo thành một không gian CSDL hoặc một “thế giới nhỏ” (miniworld).
 Một CSDL là một tập hợp dữ liệu liên kết với nhau một cách logic và mang một
ý nghĩa nào đó. Một CSDL được thiết kế và được phổ biến cho một mục đích riêng. Một
hệ quản trị cơ sở dữ liệu là một tập chương trình giúp cho người sử dụng tạo ra, duy trì
và khai thác CSDL. Người ta gọi cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu bằng một
thuật ngữ chung là hệ cơ sở dữ liệu.

 Hệ quản trị cơ sở dữ liệu (tiếng Anh: Database Management System - DBMS),
là phần mềm hay hệ thống được thiết kế để quản trị một cơ sở dữ liệu. Cụ thể, các
chương trình thuộc loại này hỗ trợ khả năng lưu trữ, sửa chữa, xóa và tìm kiếm thơng
tin trong một CSDL. Có rất nhiều loại hệ quản trị CSDL khác nhau: từ phần mềm nhỏ
chạy trên máy tính cá nhân cho đến những hệ quản trị phức tạp chạy trên một hoặc nhiều
siêu máy tính.
 Tuy nhiên, đa số hệ quản trị CSDL trên thị trường đều có một đặc điểm chung là
sử dụng ngôn ngữ truy vấn theo cấu trúc mà tiếng Anh gọi là Structured Query Language
(SQL). Các hệ quản trị CSDL phổ biến được nhiều người biết đến là MySQL, Oracle,
PostgreSQL, SQL Server, DB2, Infomix, v.v... Phần lớn các hệ quản trị CSDL kể trên
hoạt động tốt trên nhiều hệ điều hành khác nhau như Linux, Unix và MacOS ngoại trừ
SQL Server của Microsoft chỉ chạy trên hệ điều hành Windows.
2. GIỚI THIỆU SQLITE
 SQLite là cơ sở dữ liệu mở được viết dưới dạng thư viện tích hợp nhúng vào
Android, hỗ trợ các đặc điểm về quan hệ chuẩn của cơ sở dữ liệu như cú pháp,
transaction, các câu lệnh. SQLite được sử dụng rộng rãi trong các ứng dụng di động trên
Android, iOS, ... Mozilla Firefox cũng sử dụng SQLite để lưu trữ các dữ liệu về cấu
hình.
10


 Với bộ thư viện được tích hợp sẵn SQLite sẽ giúp các lập trình viên có thể lưu
trữ và phục hồi dữ liệu bất cứ lúc nào. Tuy chỉ là phiên bản rút gọn nhưng SQLite có
thể đáp ứng được hầu hết các nhu cầu về xử lý dữ liệu. Tính linh động trong SQLite
cũng giúp ta thể kiểm sốt được các thơng tin dữ liệu.
 Sử dụng SQLite không yêu cầu về thiết lập bất cứ cơ sở dữ liệu hoặc đòi hỏi
quyền admin.
 SQLite hỗ trợ các kiểu dữ liệu : TEXT, INTEGER, REAL.
 Đường dẫn của cơ sở dữ liệu:
DATA/data/<PACKAGE_NAME>/databases/FILENAME

 Thể hiện dữ liệu ở dạng bảng quan hệ:
 Cột: thể hiện trường dữ liệu (hoặc thuộc tính dữ liệu).
 Dịng: một thể hiện dữ liệu.
word
app id
frequency
Locale
_ID

mapreduce

userl

100

en_US

1

precompiler

user14

200

fr_FR

2

applet


user2

225

fr_CA

3

const

userl

255

pt_BR

4

Int

user5

100

en_UK

5

Mặc định mỗi ứng dụng sẽ được cấp phát một thư mục cho việc lưu trữ cơ sở dữ

liệu và nó chỉ có thể được dùng bởi ứng dụng đó. Nếu muốn chia sẻ dữ liệu dùng chung
giữa các ứng dụng ta có thể sử dụng Content Provider.
3. XÂY DỰNG CƠ SỞ DỮ LIỆU VỚI SQLITE
3.1 Tạo Cơ sở dữ liệu
 Tạo cơ sở dữ liệu thông qua lớp SQLiteOpenHelper.
 SQLiteOpenHelper là một lớp ảo, SQLiteOpenHelper giúp tạo các cơ sở dữ
liệu dùng SQLite (vì SQLite khơng hỗ trợ các phương thức khởi tạo cơ sở dữ
liệu). Vậy làm sao để sử dụng được SQLiteOpenHelper? Vì
SQLiteOpenHelper là một lớp ảo nên ta cần khai báo một lớp khác kế thừa
lớp này.
 SQLiteOpenHelper thực hiện các phương thức cần thiết cho phép khởi tạo,
nâng cấp cơ sở dữ liệu. Tạo đối tượng để truy cấp cơ sở dữ liệu (Read và
Write).
 SQLiteDatabase cung cấp phương thức insert(), update(), delete(), hoặc
execSQL() cho phép thực hiện truy xuất dữ liệu.
 Override phương thức onCreate() để tạo cơ sở dữ liệu.
 Override phương thức onUpgrade() để nâng cấp cơ sở dữ liệu.
 Lớp SQLiteOpenHelper cung cấp 2 phương thức getReadableDatabase() và
getWriteableDatabase() để trả về đối tượng SQLiteDatabase.
Ví dụ:
 Tạo một CSDL có tên: COUNTRY_DB
 Trong đó:
 Tạo một Table có tên: COUNTRY.
 Table COUNTRY có 3 cột là: _id, enName và viName với _id là khóa
chính và có giá trị tự động tăng.


11



public class MySQLiteHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "COUNTRY_DB";
public static final String TABLE_NAME = "COUNTRY ";
public static
final String COL_ID = "_id";
public static
final String COL_EN_NAME = "enName";
public static
final String COL_VI_NAME = "viName";
public static
final String CREATE_TABLE = "CREATE
TABLE "
+ TABLE_NAME + " ("
+ COL_ID + " integer primary key autoincrement, "
+ COL_EN_NAME + "
text not
null, "
+ COL_VI_NAME + " text not null);";.
public MySQLiteHelper(Context context) { super(context, DB_NAME,
null, 1);
}
}

Lưu ý: Hàm khởi tạo có các thơng số sau:
 Context: Biến ngữ cảnh.
 DB_NAME: Tên của cơ sở dữ liệu.
 CursorFactory: Đơi lúc chúng ta có thể extend lớp cursor để kế thừa một số
phương thức và truy vấn. Trong trường hợp đó, ta dùng một instance của
CursorFactory để tham chiếu đến lớp chúng ta tạo thay cho mặc định. Khi
dùng mặc định thì ta để nó null.

 Version: Version của cơ sở dữ liệu.
 Tiến hành tạo CSDL trong hàm onCreate():
@Override
public void onCreate(SQLiteDatabase db) {
Log.d("SQLite", "On Create Database");
//Tạo Table với câu lệnh execSQL db.execSQL(CREATE_TABLE);
}
^Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
3.2 Mở Cơ sở dữ liệu
 Dùng cú pháp getReadableDatabase() và getWriteableDatabase() để trả về đối
tượng SQLiteDatabase cần sử dụng.
 SQLiteDatabase là đối tượng để truy cập cơ sở dữ liệu (Read và Write).
 SQLiteDatabase cung cấp phương thức insert(), update(), delete(), hoặc execSQL()
cho phép thực hiện truy xuất dữ liệu.
MySQLiteHelper myHelper = new MySQLiteHelper(context);
SQLiteDatabase database;
try{
database = myHelper.getWritableDatabase();
}catch(SQLiteException ex){
database = myHelper.getReadableDatabase();
}
 Nếu cơ sở dữ liệu đã tồn tại thì lớp SQLiteOpenHelper sẽ khơng tạo thêm mà chỉ
mở kết nối đến cơ sở dữ liệu đó.


12



Đóng Cơ sở dữ liệu
public void close(){ myHelper.close();
}
4. TRUY VẤN DỮ LIỆU
4.1 Truy vấn (Query)
4.1.1 Truy vấn với câu lệnh SQL
 Sử dụng phương thức rawQuery() của lớp SQLiteDatabase.
 Phương thức rawQuery() nhận vào một giá trị chuỗi là câu lệnh SQL dùng để truy
vấn dữ liệu và trả ra một đối tượng Cursor.
String queryStr = “SELECT * FROM COUNTRY WHERE _id=? AND
enName=?”;
Cursor cursor = database.rawQuery(queryStr, new String[]{“1”,”Vietnam”});
 Cú pháp truy xuất dữ liệu trong câu lệnh SQL:
1. Phát biểu truy vấn SQL có dạng:
SELECT {Tên trường cần truy vấn, * nếu lấy tất cả các trường}
FROM {Tên Table}
WHERE {Biểu thức điều kiện}
2. SELECT dùng để đọc thông tin từ cơ sở dữ liệu theo trường hợp quy định hay
những biểu thức cho trường hợp đó.
3. FROM chỉ ra tên một bảng hay những bảng có liên quan cần truy vấn thông
tin.
4. WHERE để tạo nên điều kiện cần lọc mẩu tin theo tiêu chuẩn được định nghĩa.
Thông thường, WHERE dùng cột (trường) để so sánh với giá trị cột khác, hay
biểu thức chứa cột (trường) bất kỳ có trong bảng (table).

o

13



SELECT * FROM T;

SELECT Cl FROM T

Hình 1.1. Ví dụ truy vấn với câu lệnh SELECT.
- Các phép toán so sánh trong câu lệnh SQL:
>

Lớn WHERE _id>10; < : nhỏ hơn WHERE _id<10;

>=

Lớn hơn hoặc bằng WHERE _id>=10;

<=

Nhỏ hơn hoặc bằng WHERE _id<=10;

=

Bằng WHERE _id=1;

!=

Khác (ko bằng ) WHERE _id!=1;

- Các phép toán logic trong câu lệnh SQL:
AND

WHERE '_id'=1 AND 'enName'='admin';


OR

WHERE '_id'=1 OR 'enName'='admin';

NOT

WHERE enName is not NULL;

NOT IN

WHERE _id NOT IN( '10','20');

BETWEEN

WHERE _id BETWEEN 10 And 20;

LIKE

WHERE enName LIKE '%Vietnam';

NOT LIKE

WHERE enName NOT LIKE %Vietnam ;

IN

WHERE _id IN ('10720730');

4.1.2 Truy vấn với cú pháp hàm

 Sử dụng phương thức query() của lớp SQLiteDatabase.
 Hỗ trợ lập trình viên truy xuất dữ liệu từ CSDL mà không cần biết cú pháp các câu
lệnh SQL.
 Phương thức query() cũng trả ra một đối tượng Cursor. Để lấy dữ liệu từ Cursor,
trước hết cần chuyển đến vị trí xác định với các phương thức: moveToFirst(),
14


moveToNext(). moveToPosition(intposition)... như được giới thiệu ở Bài 2.
 Cursor:
1. Đối tượng dữ liệu được trả về khi thực hiện truy vấn dữ liệu trong cơ sở dữ liệu
của SQLite hoặc Content Provider.
2. Thể hiện dữ liệu ở dạng bảng quan hệ :
■ Cột: thể hiện trường dữ liệu (hoặc thuộc tính dữ liệu).
■ Dịng: một thể hiện dữ liệu.
Cursor cursor = database.query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having, String orderBy);
String table: tên của bảng cần truy vấn.
String[] columns: danh sách các cột sẽ trả về dữ liệu.
String selection: chứa các điều kiện truy vấn.
String[] selectionArgs: danh sách các tham số phụ cho câu điều kiện.
String[] groupBy: gom nhóm các cột kết quả.
String[] having: bộ lọc theo điều kiện.
String[] orderBy: sắp xếp theo mảng cột được chỉ định.
Ví dụ:
- Sử dụng phương thức query(), lấy ra tên tiếng Anh và tên tiếng Việt của dịng có
_id là 1.
String selectedColumns = new String[]{ COL_EN_NAME, COL_VI_NAME};
Cursor c = database.query(TABLE_NAME, selectedColumns, “_id=?”, new
String[]{“1”}, null, null, null);

if (c.moveToFirst()) {
while (!c.isAfterLast())
{
String enName =
c.getString(c.getColumnIndex(selectedColumns[0]));
String viName =
c.getString(c.getColumnIndex(selectedColumns[1]));
c.moveToNext();
}
}
4.2 Quản lý
 Lớp SQLiteDatabase cung cấp các phương thức như: insert(), update(), delete()
hoặc execSQL() cho phép người dùng có thể quản lý và truy xuất dữ liệu.
4.2.1 Insert
 Tạo một dòng mới để insert dữ liệu:
Contentvalues newValues = new ContentValues();
- Gán giá trị vào mỗi cột trong dịng vừa tạo:
newValues.put(COLUMN_NAME,values);
- Ví dụ:
newValues.put(COL_EN_NAME, “Germany”);
newValues.put(COL_VI_NAME, “Đức”);
//Thêm dịng đó vào database
database.insert(TABLE_NAME, null, newValues);
4.2.2 Update
- Tạo một dòng mới để update dữ liệu:
ContentValues newValues = new ContentValues();
15


- Gán giá trị vào mỗi cột trong dòng vừa tạo:

newValues.put(COLUMN_NAME, values);
- Ví dụ:
newValues.put(COL_EN_NAME,”Germany2”);
o Cập nhật lại dịng vừa tạo với đúng mệnh đề WHERE:
String where = “_id=” + rowId; database.update(TABLE_NAME, newValues,
where, null);
4.2.3 Delete
- Sử dụng câu truy vấn delete truyền vào tên bảng và chỉ số của hàng cần xóa trong
mệnh đề WHERE.
- Nếu mệnh đề WHERE khơng có sẽ thực hiện xóa tất cả các dịng:
database.delete(TABLE_NAME, “_id=” + rowID, null);
5. SẮP XẾP DỮ LIỆU
5.1 Truy vấn sắp xếp
 Thông thường trong khi truy vấn mẩu tin từ bảng dữ liệu, kết quả hiển thị sắp
xếp theo chiều tăng hay giảm dựa trên ký tự ALPHABET. Nhưng bạn cũng có thể sắp
xếp theo một tiêu chuẩn bất kỳ .
 Cú pháp cho mệnh đề ORDER BY cùng với trạng thái tăng dần (ASCENDING)
hoặc giảm dần (DESCENDING):
5.1.1 Tăng dần (ASCENDING)
ORDER BY columnName ASC
ORDER BY columnName1 + columnName2 ASC
- Ví dụ:
o Truy vấn với câu lệnh SQL:
SELECT * FROM COUNTRY ORDER BY enName ASC
o Truy vấn với cú pháp hàm:
String
orderBy
=
myHelper.COL_EN_NAME
+

"
ASC";
database.query(TABLE_NAME, null, null, null, null, orderBy);
5.1.2 Giảm dần (DESCENDING)
ORDER BY columNname DESC
ORDER BY columNname1 + columnName2 DESC
- Ví dụ:
o Truy vấn với câu lệnh SQL:
SELECT * FROM COUNTRY ORDER BY enName DESC
o Truy vấn với cú pháp hàm:
String
orderBy
=
myHelper.COL_VI_NAME
+
"
DESC";database.query(TABLE_NAME, null, null, null, null, orderBy);
5.2 Truy vấn gom nhóm
Ví dụ minh họa:
o Ta có CSDL như sau:

16


Hình 1.1. CSDL mẫu
+ Gom nhóm các bài hát có MaSo lớn hơn 55500 bằng cú pháp GROUP BY và
mệnh đề HAVING với cú pháp:
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]

GROUP BY column1, column2
HAVING [ conditions ]
+ Có thể truy vấn với câu lệnh SQL:
SELECT * FROM BAIHATCUTHE GROUP BY TenBaiHat HAVING
MaSo>55500
+ Hoặc truy vấn với cú pháp hàm:
String groupBy = “BAIHATCUTHE”;
String having = “Maso>55500”
database.query(TABLE_NAME, null, null, groupBy, having, null);
Kết quả:

.

17


-

Hình 1.2. Kết quả sau khi gom nhóm dữ liệu.
Để cấu hình nâng cao, chúng ta chọn Show Advanced Settings.
Chọn Finish để hồn thành q trình tạo máy ảo.

Bài tập của học viên
1: Trình bày truy vấn dữ liệu với sqlite trong Android
2: Giới thiệu về SQLITE trong Android
3: Trình bày các bước truy vấn gom nhóm
4. Trình bày các bước xây dựng cơ sở dữ liệu với sqlite
5.Viết ứng dụng cơ bản sử dụng SQLite
Hướng dẫn thực hiện
1: Trình bày truy vấn dữ liệu với sqlite trong Android, tham khảo mục 4 trong bài

học trên
2: Giới thiệu về SQLITE trong Android, tham khảo mục 2 trong bài học trên
3: Trình bày các bước truy vấn gom nhóm, tham khảo mục 5.2 trong bài học trên
4. Trình bày các bước xây dựng cơ sở dữ liệu với sqlite, tham khảo mục 3 trong
bài học trên
5. Viết ứng dụng cơ bản sử dụng SQLite
Trong phần này chúng ta cùng điểm qua về DAO (Data Access Object). DAO có
nhiệm vụ xử lý kết nối với Database để truy cập và chỉnh sửa dữ liệu. DAO cũng có
nhiệm vụ chuyển đổi từ đối tượng trong database thành đối tượng Java tương ứng.
Tuy nhiên sử dụng DAO không phải lúc nào cũng hợp lý. Đôi khi dùng trực tiếp
thẳng vào database, hoặc sử dụng Content Provider thì tốt hơn (vì đỡ phải tạo model).
Bước 1: Tạo project với các thơng tin như hình vẽ (tên là SQLiteEx):

-

Hình 1.3 Tạo New Project
Và chọn mức API là 13:

18


Hình 1.4 Tạo lớp HowkSQLiteHelper
Bước 2: Tạo lớp HowkSQLiteHelper kế thừa từ SQLiteOpenHelper:
 HowkSQLiteHelper.java
package com.howkteam.sqliteex;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class HowkSQLiteHelper extends SQLiteOpenHelper {
public static final String TABLE_PEOPLE = "people";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_PERSON = "person";
private static final String DATABASE_NAME = "people.db";
private static final int DATABASE_VERSION = 1;
// Câu lệnh khởi tạo Database.
private static final String DATABASE_CREATE = "create table "
+ TABLE_PEOPLE + "( " + COLUMN_ID
+ " integer primary key autoincrement, " + COLUMN_PERSON
+ " text not null);";
public HowkSQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
19


database.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(HowkSQLiteHelper.class.getName(),
"Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_PEOPLE);
onCreate(db);
}
}

Lớp SQLiteOpenHelper này có tác dụng định nghĩa các câu truy vấn, cũng như làm
nền móng cho việc giao tiếp với SQLite. Như các bạn đã thấy, chúng ta có truy vấn để
tạo bảng: (DATABASE_CREATE), và tên các cột, bảng, file database.
 Đồng thời tạo class Person.java
package com.howkteam.sqliteex;
public class Person {
private long id;
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String comment) {
this.name = comment;
}
// Will be used by the ArrayAdapter in the ListView
@Override
public String toString() {
return name;
}
}
Bước 3: Tạo lớp PeopleDataSource. Lớp này không kế thừa từ đâu cả, mà chỉ có
nhiệm vụ xử lý dữ liệu từ Database nhờ sự trợ giúp của lớp Helper phía trên, và chứa
các phương thức để lấy dữ liệu ra dạng Java object:
package com.howkteam.sqliteex;

import android.content.ContentValues;
import android.content.Context;
20


import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
public class PeopleDataSource {
// Các trường database.
private SQLiteDatabase database;
private HowkSQLiteHelper dbHelper;
private String[] allColumns = {HowkSQLiteHelper.COLUMN_ID,
HowkSQLiteHelper.COLUMN_PERSON};
public PeopleDataSource(Context context) {
dbHelper = new HowkSQLiteHelper(context);
}
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}
public void close() {
dbHelper.close();
}
public Person createPerson(String pName) {
ContentValues values = new ContentValues();
values.put(HowkSQLiteHelper.COLUMN_PERSON, pName);
long insertId = database.insert(HowkSQLiteHelper.TABLE_PEOPLE, null,

values);
Cursor cursor = database.query(HowkSQLiteHelper.TABLE_PEOPLE,
allColumns, HowkSQLiteHelper.COLUMN_ID + " = " + insertId, null,
null, null, null);
cursor.moveToFirst();
Person newPerson = cursorToPerson(cursor);
cursor.close();
return newPerson;
}
public void deletePerson(Person p) {
long id = p.getId();
Log.e("SQLite", "Person entry deleted with id: " + id);
database.delete(HowkSQLiteHelper.TABLE_PEOPLE,
HowkSQLiteHelper.COLUMN_ID
+ " = " + id, null);
}
public List<Person> getAllPeople() {
List<Person> people = new ArrayList<Person>();
21


Cursor cursor = database.query(HowkSQLiteHelper.TABLE_PEOPLE,
allColumns, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Person person = cursorToPerson(cursor);
people.add(person);
cursor.moveToNext();
}
// Nhớ đóng con trỏ lại nhé.

cursor.close();
return people;
}
private Person cursorToPerson(Cursor cursor) {
Person person = new Person();
person.setId(cursor.getLong(0));
person.setName(cursor.getString(1));
return person;
}
}
Bước 4: Quay lại sửa file activity_main.xml lại như sau:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=" />android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:id="@+id/group"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="Add New"/>
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"

22


android:text="Delete First"/>
</LinearLayout>
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
Bước 5: Chỉnh sửa lại lớp MainActivity, kế thừa cho nó từ ListActivity và tiến hành
đổ dữ liệu:
package com.howkteam.sqliteex;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import java.util.List;
import java.util.Random;
public class MainActivity extends ListActivity {
private PeopleDataSource datasource;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
datasource = new PeopleDataSource(this);
datasource.open();
List<Person> values = datasource.getAllPeople();

// use the SimpleCursorAdapter to show the
// elements in a ListView
ArrayAdapter<Person> adapter = new ArrayAdapter<Person>(this,
android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
}
// Tạo sự kiện khi click vào các nút trong activity_main.xml
public void onClick(View view) {
23


@SuppressWarnings("unchecked")
ArrayAdapter<Person> adapter = (ArrayAdapter<Person>) getListAdapter();
Person person = null;
switch (view.getId()) {
// Thêm người vào danh sách.
case R.id.add:
String[] people = new String[]{"Alice", "Bob", "Mallory"};
int nextInt = new Random().nextInt(3);
person = datasource.createPerson(people[nextInt]);
adapter.add(person);
break;
// Xóa người đầu tiên khỏi danh sách.
case R.id.delete:
if (getListAdapter().getCount() > 0) {
person = (Person) getListAdapter().getItem(0);
datasource.deletePerson(person);
adapter.remove(person);
}
break;

}
adapter.notifyDataSetChanged();
}
@Override
protected void onResume() {
datasource.open();
super.onResume();
}
@Override
protected void onPause() {
datasource.close();
super.onPause();
}
}
Ở đây mình xin giải thích một chút:
 Chúng ta tạo một mảng gồm 3 phần tử: Alice, Bob và Mallory. Mỗi khi nhấn
nút Add thì sẽ thêm ngẫu nhiên một trong 3 phần tử này vào danh sách.
 Khi nhấn Delete thì danh sách sẽ bỏ phần tử đầu tiên.
 Sau khi tắt app, bật lại, ứng dụng vẫn sẽ load danh sách như bình thường. Đó
là vì nó đã được lưu trong SQLite rồi.
Chạy app, và chúng ta có:

24


Hình 1.5 Chạy App
Bước 6: Bước này chỉ dành cho những máy đã root .Các bạn có thể sử dụng một app
ngoài như SQLite Editor để vọc sâu vào trong app SQLiteEx, các bạn sẽ thấy có file
db được tạo ra và các bảng tương ứng:


25


×