Beginning Android for Application - Chapter 6: Duy trì dữ liệu

Duy trì dữ liệu là một công việc rất quan trọng trong lập trình. Trong Android, có 3

cách cơ bản để duy trì dữ liệu.

 Một kĩ thuật đơn giản được biết đến đó là shared preferences để lưu trữ những

khúc dữ liệu.

 Sử dụng file systems

 Sử dụng SQLite database.

Saving and Loading User Preferences.

Android cung cấp SharedPreferences object để giúp bạn lưu trữ những dữ liệu đơn

giản. Lấy ví dụ, ứng dụng của bạn có lựa chọn để người dùng lưu trữ font size của text được

hiển thị trong ứng dụng. Trong trường hợp này, bạn cần lưu size của text để khi người dùng

truy xuất vào lần tiếp theo, text sẽ được load với size đã lưu. Bạn có nhiều cách để làm như

vậy. Bạn có thể lưu dữ liệu vào một file, nhưng bạn cần phải làm các thao tác quản lý file đó

như viết dữ liệu vào file . Và vì thế, nếu bạn có những mẩu thông tin nhỏ cần lưu trữ thì

việc lưu chúng vào file sẽ trở nên nặng nề. Một sự lựa chọn khác đó là viết dữ liệu vào

database, nhưng cũng không phù hợp.

pdf30 trang | Chuyên mục: Android | Chia sẻ: dkS00TYs | Lượt xem: 2951 | Lượt tải: 2download
Tóm tắt nội dung Beginning Android for Application - Chapter 6: Duy trì dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Thangit14.blogspot.com Thangit14@gmail.com 
1 
Chương 6: Duy trì dữ liệu 
Duy trì dữ liệu là một công việc rất quan trọng trong lập trình. Trong Android, có 3 
cách cơ bản để duy trì dữ liệu. 
 Một kĩ thuật đơn giản được biết đến đó là shared preferences để lưu trữ những 
khúc dữ liệu. 
 Sử dụng file systems 
 Sử dụng SQLite database. 
Saving and Loading User Preferences. 
Android cung cấp SharedPreferences object để giúp bạn lưu trữ những dữ liệu đơn 
giản. Lấy ví dụ, ứng dụng của bạn có lựa chọn để người dùng lưu trữ font size của text được 
hiển thị trong ứng dụng. Trong trường hợp này, bạn cần lưu size của text để khi người dùng 
truy xuất vào lần tiếp theo, text sẽ được load với size đã lưu. Bạn có nhiều cách để làm như 
vậy. Bạn có thể lưu dữ liệu vào một file, nhưng bạn cần phải làm các thao tác quản lý file đó 
như viết dữ liệu vào file …. Và vì thế, nếu bạn có những mẩu thông tin nhỏ cần lưu trữ thì 
việc lưu chúng vào file sẽ trở nên nặng nề. Một sự lựa chọn khác đó là viết dữ liệu vào 
database, nhưng cũng không phù hợp. 
Bạn chỉ cần sử dụng SharedPreferences object, lưu dữ liệu dưới dạng name/value và 
dữ liệu đó sẽ tự động được lưu dưới dạng file xml cho bạn. 
Truy cập Preferences sử dụng Activity. 
Thangit14.blogspot.com Thangit14@gmail.com 
2 
Thangit14.blogspot.com Thangit14@gmail.com 
3 
Thangit14.blogspot.com Thangit14@gmail.com 
4 
Thangit14.blogspot.com Thangit14@gmail.com 
5 
Thangit14.blogspot.com Thangit14@gmail.com 
6 
Lấy về và sửa Preferences Values. 
Thangit14.blogspot.com Thangit14@gmail.com 
7 
Thay đổi tên mặc định của file Preferences 
Thangit14.blogspot.com Thangit14@gmail.com 
8 
Thangit14.blogspot.com Thangit14@gmail.com 
9 
Lưu trữ dữ liệu vào file 
Đôi khi bạn cần phải lưu dữ liệu vào file, ví dụ như bạn muốn lưu một bài thơ chẳng 
hạn. Java hỗ trợ bạn việc này bằng gói java.io. 
Lưu trữ vào bộ nhớ trong: Internal Store. 
Thangit14.blogspot.com Thangit14@gmail.com 
10 
Thangit14.blogspot.com Thangit14@gmail.com 
11 
Thangit14.blogspot.com Thangit14@gmail.com 
12 
Để lưu trữ một file, bạn đã sử dụng FileOutputStream class. Method 
openFileOutput() được dùng để mở một file để ghi đè, với mode được chỉ định. Trong ví dụ 
này là MODE_WORLD_READABLE để xác định file này được phép đọc bởi tất cả các app 
khác. Ngoài ra còn có MODE_PRIVATE( chỉ được truy xuất bởi chính ứng dụng đã tạo ra 
nó) , MODE_WORLD_WRITEABLE( tất cả các ứng dụng khác được phép truy xuất vào 
file), MODE_APPEND( cho phép ghi tiếp vào file). 
Để chuyển từ character stream sang byte stream, bạn sử dụng class 
OutputStreamWriter. 
Để đọc nội dung từ file bạn sử dụng FileInputStream và InputStreamReader class. 
Vì bạn không biết được size của file cần đọc, nội dung được đọc ở từng block 100 
character trong một buffer (character aray). 
Vì bạn không biết trước kích thước của file cần đọc, nên nội dung được đọc trong 
từng block gồm 100 character ở buffer( character array). Sau đó những kí tự này được lưu 
vào một String object. 
Phương thức read() của InputStreamReader object kiểm tra số character được đọc và 
trả về -1 nếu không còn kí tự nào. 
Để kiểm tra sự tồn tại của file textfile.txt bạn và 
/data/data/net.learn2develop.Files/files ở File Explore trong DDMS. 
Thangit14.blogspot.com Thangit14@gmail.com 
13 
Lưu trữ file ở Bộ nhớ ngoài (Thẻ SD). 
Thangit14.blogspot.com Thangit14@gmail.com 
14 
Trong ví dụ này, phương thức getExternalStorageDirectory() trả về full path của bộ 
nhớ ngoài. Nó thường trả về “/sdcard” trong thiết bị thực, và “/mnt/sdcard ” cho máy ảo 
Android. 
Để load file bạn có thể làm như sau: 
Thangit14.blogspot.com Thangit14@gmail.com 
15 
Chú ý trong trường hợp bạn viết lên thẻ nhớ, bạn cần add permission 
WRITE_EXTERNAL_STORAGE trong file AndroidManifest.xml 
Thangit14.blogspot.com Thangit14@gmail.com 
16 
Bạn sẽ thấy file txt được chứa ở /mnt/sdcard/MyFiles folder. 
Lựa chọn cách thức lưu trữ thích hợp nhất. 
Thangit14.blogspot.com Thangit14@gmail.com 
17 
Đến đây, bạn đã biết 3 cách để lưu trữ dữ liệu trong Android, vậy khi nào thì dùng 
chúng? 
 Nếu bạn có dữ liệu có thể được mô tả sử dụng cặp name/value thì hãy sử dụng 
SharedPreferences. Ví dụ, nếu bạn muốn lưu trữ những preference của người 
dùng (như font chữ, nhạc nền, ngày sinh nhật, dữ liệu login …) thì nên sử 
dụng SharedPreferences. Một lý do nữa, đó là nếu bạn muốn việc lưu trữ đơn 
giản thì cũng nên sử dụng nó. 
 Nếu bạn muốn lưu trữ dữ liệu mà không cần kết nối mạng, ví dụ như bạn cần 
tải ảnh từ web về để hiển thị cho hình nền trên ứng dụng của bạn, thì việc sử 
dụng internal storage là phù hợp. Một trường hợp khác đó là khi bạn cần lưu 
trữ file note của người dùng, khi họ sử dụng app của bạn thì việc sử dụng 
internal storage cũng là thích hợp. 
 Việc sử dụng SD card được dùng khi bạn muốn chia sẻ dữ liệu của ứng dụng 
với những người dung khác. Ví dụ, bạn muốn tạo một ứng dụng Android ghi 
lại tọa độ vị trí của người dùng, và bạn muốn chia sẻ chúng với bạn bè. 
Sử dụng Resources Tĩnh (Static Resources) 
Ngoài việc tạo và sử dụng file trong thời gian runtime, bạn cũng có thể thêm file từ 
trước và có thể sử dụng trong thời gian runtime. Ví dụ, bạn có thể tạo ra những file help giúp 
để hiển thị những help messages khi người dùng cần chúng. Trong trường hợp này, bạn có 
thể thêm file vào res/raw. 
Bạn sử dụng method getResources() để lấy về Resource object, nằm trong folder res/ 
Thangit14.blogspot.com Thangit14@gmail.com 
18 
Tạo và sử dụng DataBases 
Cho đến giờ, tất cả các kỹ thuật mà bạn học được đều được dùng để lưu trữ dữ liệu 
đơn giản. Để lưu trữ dữ liệu quan hệ, bạn phải sử dụng database. 
Android sử dụng SQLite database để lưu trữ. Database mà bạn tạo cho ứng dụng của 
bạn chỉ có thể được truy xuất bởi chính nó. Trong Android, database mà bạn tạo luôn được 
lưu trữ ở /data/data//database . 
Tạo DBAdapter Helper Class. 
Để làm việc với database, bạn nên tạo ra một lớp hỗ trợ để đóng gói tất cả các truy 
xuất phức tạo vào data để làm cho việc sử dụng code trở nên rõ ràng. Vì thế bạn sẽ tạo ra một 
helper class là DBAdapter được dùng để create, open, clode và sử dụng SQLite database. 
Trong ví dụ này, bạn tạo ra một database là 
MyDB bao gồm một bảng là contacts. Bảng này có 3 cột 
là _id, name, và email. 
Thangit14.blogspot.com Thangit14@gmail.com 
19 
Thangit14.blogspot.com Thangit14@gmail.com 
20 
Thangit14.blogspot.com Thangit14@gmail.com 
21 
Trong ví dụ này, DATABASE_CREATE là hằng chứa SQL statement để tạo ra bảng 
contacts trong MyDB database. 
Bên trong DBAdapter class bạn tạo ra một private class extended từ 
SQLiteOpenHelper class. Đây chính là class được hỗ trợ trong Android để quản lý sự tạo 
thành database và version. Trong lớp này bạn override 2 method đó là onCreate() và 
onUpgrade() 
Method onCreate() sẽ tạo ra một database mới nếu nó chưa tồn tại. Method 
onUpgrade() được gọi khi database cần được nâng cấp. Nó sẽ được thực hiện bằng việc kiểm 
tra giá trị DATABASE_VERSION. 
Bạn có thể định nghĩa những method khác nhau để open, close database, cũng như các 
method cho việc thêm sửa xóa. 
Chú ý rằng Android sử dụng Curser class là giá trị trả về của queries. Hãy coi Curser 
như một con trỏ trỏ đến resulset từ database query. 
Bạn sử dụng ContentValues object để lưu trữ các cặp name/value. 
Trong constructor của DBAdapter, bạn tạo ra một constructor chứa một 
DatabaseHelperClass. 
Thangit14.blogspot.com Thangit14@gmail.com 
22 
Sử dụng Database 
Bạn có thể kiểm tra ở folder database như sau: 
Thangit14.blogspot.com Thangit14@gmail.com 
23 
Lấy về các bản ghi từ database: 
Thangit14.blogspot.com Thangit14@gmail.com 
24 
Lấy về một Contact 
Update a Contact 
Thangit14.blogspot.com Thangit14@gmail.com 
25 
Delete a contact 
Thangit14.blogspot.com Thangit14@gmail.com 
26 
Upgrade database 
Nếu bạn muốn thêm bảng, thay đổi cấu trúc của bảng hay database thì bạn cần phải 
upgrade database. 
Để upgrade database bạn chỉ cần thay đổi DATABASE_VERSION thành một giá trị 
lớn hơn . 
Trong thực tế, để làm việc này, bạn cần sao lưu dữ liệu và copy vào bảng dữ liệu mới. 
Pre-Creating the Database 
Trong thực tế, sẽ dễ dàng hơn nếu bạn tạo database bằng giao diện. Bạn có thể sử 
dụng các công cụ trên mạng, ví dụ như SQLite Database Browser 
( 
Thangit14.blogspot.com Thangit14@gmail.com 
27 
Với database được thiết kế bằng công cụ, bạn cần gắn đưa vào ứng dụng của mình 
như sau: 
Chú ý: Chú ý cách đặt tên file để đưa vào assets phải là kí tự thường, không được bao 
gồm kí tự viết hoa. 
Thangit14.blogspot.com Thangit14@gmail.com 
28 
Thangit14.blogspot.com Thangit14@gmail.com 
29 
Để tránh việc mỗi khi chạy project lại thực hiện ghi đè lên data base, nên ở câu lệnh if 
ta kiểm tra điều kiện nếu có tồn tại database thì sẽ không thực hiện. Để thực hiện bạn bỏ kí 
tự ! để đảo điều kiện trong if. 
Thangit14.blogspot.com Thangit14@gmail.com 
30 

File đính kèm:

  • pdfBeginning Android for Application - Chapter 6 Duy trì dữ liệu.pdf
Tài liệu liên quan