2. Nội dung
Data Storage in Android
Shared Preferences
SQLite database
hoccungdoanhnghiep.com
3. Data Storage in Android
Android cung cấp nhiều cơ chế để lưu dữ liệu,
và tùy vào nhu cầu mà LTV lựa chọn phương
án hợp lý
Các cơ chế lưu dữ liệu:
Shared Preferences: Dùng để lưu các dữ liệu
nguyên thủy ở dạng cặp: key/value
Internal Storage: Lưu dữ liệu trên bộ nhớ trong
của thiết bị
External Storage: Lưu trữ dữ liệu ở bộ nhớ ngoài
(thẻ nhớ, external mounted partition)
SQLite database: lưu dữ liệu ở dạng có cấu trúc
trong một cơ sở dữ liệu
hoccungdoanhnghiep.com
Network connection: kết nối đến server mạng và
4. Shared Preferences
Class SharedPreferences cung cấp sẵn bộ
framework để save & get ra cặp key-value đã
lưu trước đó
Các dạng dữ liệu cơ bản được dùng với share-
pref: int, string, float, long, boolean
hoccungdoanhnghiep.com
5. SharedPreferences -> lưu/edit data
Khai báo string refPath ảo để truy xuất data: String PREF_MY_INFO_PATH =
"vn.com.smartservice.myinfo”
Khai báo các key string để lưu values tương ứng
String PREF_NAME = "PREF_NAME”
String PREF_AGE = "PREF_AGE”
String PREF_SEX = "PREF_SEX”
Ở activity L6DataStorageActivity, cần save data, thực hiện các việc sau:
Khởi tạo object của class SharePreference: SharedPreferences myinfosets
= getSharedPreferences(PREF_MY_INFO_PATH , 0);
Khởi tạo object editor có khả năng save data: SharedPreferences.Editor
editor = myinfosets.edit();
save data bằng cách gọi lệnh put[TypeOfData](key, value)
editor.putBoolean(PREF_SEX, true/false);
editor.commit(); // save data
hoccungdoanhnghiep.com
6. SharedPreferences -> get saved data
Ở activity ViewMyInfo, ta lấy ra data đã lưu sẵn từ trước. Thực hiện
các việc sau:
Khởi tạo object của class SharePreference:
SharedPreferences myinfosets =
getSharedPreferences(PREF_MY_INFO_PATH , 0);
Dùng obj đó để get ra data tương ứng đã được lưu:
boolean sex = myinfosets.getBoolean(PREF_SEX, false); //
trong trường hợp tìm không thấy dữ liệu đã được lưu, false
sẽ được tự động trả về
Tương tự cho các kiểu data khác
hoccungdoanhnghiep.com
7. Sử dụng SQLite database
Android hỗ trợ hoàn toàn SQLite databases: create db, create
table, insert, delete, update, select.
SQLite db, tham khảo: http://www.sqlite.org/
Các datatypes cung cấp bởi sqlite:
http://www.sqlite.org/datatypes.html
Cách tốt nhất là thừa kế từ lớp SQLiteOpenHelper để thao tác với
db:
Ở thời điểm onCreate, db chỉ được tạo mới khi chưa
tồn tại db nào
Đưa vào khởi tạo các bảng ở onCreate
Db không được load lên cho đến khi có một yêu cầu
truy xuất vào db
Để read/write với db, gọi vào các hàm getWritableDatabase() và
getReadableDatabase()
hoccungdoanhnghiep.com
8. Tạo lớp xử lý db thừa kế SQLiteOpenHelper
File > New > Class
Name: DatabaseHelper
Package: vn.com.smartservice.lib
SupperClass: SQLiteOpenHelper
Mở file DatabaseHelper.java vừa tạo, Override
các hàm onCreate, onUpgrade để sử dụng
File > New > Class > MyNoteAdapter.java
Class MyNoteAdapter.java sẽ đóng vai trò layer
để access db
Viết các hàm để truy xuất, insert,… dữ liệu cần
thiết
hoccungdoanhnghiep.com
9. Tạo mới SQLite database
Mở file DatabaseHelper.java:
Override hàm onCreate
Chạy query để khởi tạo db: "CREATE TABLE
mynotes (id INTEGER PRIMARY KEY
AUTOINCREMENT, title TEXT, content TEXT);"
hoccungdoanhnghiep.com
10. Write dữ liệu vào db
Để write dữ liệu, phải đọc vào db ở dạng
writetable thông qua việc gọi hàm:
getWritableDatabase():
Mở file MyNoteAdapter.java
Create method: createNote(String title, String content) làm
các việc sau:
kết nối đến db dạng write: DatabaseHelper.
getWritableDatabase()
Tạo object của đối tượng ContentValues để put vào set
các data: ContentValues cv = new ContentValues();
put data vào:
o cv.put("title", title);
o cv.put("content", content);
gọi lệnh insert dữ liệu: db.insert(tên-bảng,null,cv)
hoccungdoanhnghiep.com
Đóng kết nối bằng cách gọi vào db.close()
11. Lấy dữ liệu từ db ra
Android sử dụng lớp Cursor để lưu dữ liệu đã lấy
được từ db ra. Cursor đóng vai trò là 1 result set
Mở file MyNoteAdapter.java
Create method: getNote()
Query db: database.rawQuery("select * from mynotes
", null);
Từ kết quả trả về, lấy ra dữ liệu dòng đầu tiên và
hiển thị: Toast.makeText(getApplicationContext(),
c.getString(1) + "," + c.getString(2), 5)
Cần chú ý, trong quá trình read data, cần phải giữ
connection luôn mở. Do đó, chỉ để đọc dữ liệu, ta
hoccungdoanhnghiep.com
12. Sử dụng db đã tạo sẵn
Copy file db đã tạo vào thư mục /assets/ trong
project
Khi thực hiện truy cập db, ta phải copy db này vào
thư mục: /data/data/package-name/databases/
Sau khi copy thành công, việc truy cập có thể
được thực hiện
hoccungdoanhnghiep.com
13. Bài tập về nhà
Phát triển tiếp phần MyInfo:
Thay việc gõ age = thanh seekbar
Đổi màn hình hiển thị My Info lên trước, thông báo
người dùng chưa đưa info vào
Thêm Toast thông báo kết quả
Phát triển tiếp phần My Note
Viết hàm lấy ra MyNote có id bất kỳ đã save
Hiển thi lên màn hình
Edit note đó
Save
Thêm Toast thông báo việc save đã hoàn tất/có lỗi
hoccungdoanhnghiep.com
14. Tham khảo
http://developer.android.com/guide/topics/data/data-storag
hoccungdoanhnghiep.com