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.
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:
- Beginning Android for Application - Chapter 6 Duy trì dữ liệu.pdf