SharedPreferences trong Android

SharedPreferences là gì? SharedPreferences trong Android cho phép bạn lưu trữ và truy xuất dữ liệu dưới dạng cặp giá trị key – value. Trong ứng dụng Android ngoài cách sử dụng thư viện SQLite hoặc Realm để lưu trữ dữ liệu thì SharedPreferences trong Android có thể sẽ là một giải pháp thay thế.

1. SharedPreferences là gì?

Thông thường bạn sẽ sử dụng SQLite hoặc Realm để lưu trữ dữ liệu trong các ứng dụng Android, SharedPreferences cũng có thể thực hiện lưu trữ dữ liệu tùy vào mục đích sử dụng của bạn.

  • SharedPreferences lưu trữ và truy xuất dữ liệu dưới dạng key – value.
  • SharedPreferences hỗ trợ kiểu dữ liệu bao gồm string, int, boolean, float, long.
  • Dữ liệu được lưu trữ trong SharedPreferences sẽ bị mất đi trong trường hợp như khi bạn gỡ cài đặt ứng dụng, xóa dữ liệu ứng dụng thông qua cài đặt…

2. Trường hợp nên sử dụng SharedPreferences?

SharedPreferences có phải là giải pháp thay thế hoàn hảo cho SQLite hay Realm không?

  • SharedPreferences có thể thực hiện lưu trữ và truy xuất dữ liệu trong ứng dụng Android tuy nhiên nó có khá nhiều hạn chế so với SQLite hoặc Realm. Vậy SharedPreferences nên được sử dụng trong trường hợp ứng dụng của bạn lưu trữ các dữ liệu nhỏ hoặc những dữ liệu không quá phức tạp.
  • SharedPreferences chỉ hỗ trợ lưu trữ dưới dạng key – value nên nếu áp dụng để truy vấn dữ liệu liên kết giữa các bảng sẽ gây ra khó khăn hơn.
  • SharedPreferences thường được các lập trình viên sử dụng lưu trữ các thông tin dạng cấu hình ứng dụng, cài đặt… thay vì SQLite, Realm bởi SharedPreferences đơn giản và nhanh hơn nhiều.

3. Sử dụng SharedPreferences trong Android?

Sử dụng phương thức getSharedPreferences(String name, intmode) giúp bạn có thể gọi SharedPreferences từ bất kỳ Context nào trong ứng dụng của bạn.

SharedPreferences sharedPref = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);

Thuộc tính “name” là tên tập tin SharedPreferences còn thuộc tính “mode” là chế độ lưu trữ SharedPreferences.

Một số chế độ lưu trữ (MODE) được sử dụng trong SharedPreference:

Thuộc tính Mô tả
MODE_PRIVATE Đây là chế độ lưu trữ riêng tư không cho phép các ứng dụng khác có thể truy cập vào tập tin SharedPreference trong ứng dụng.
MODE_WORLD_READABLE Đây là chế độ lưu trữ cho phép các ứng dụng khác chỉ có thể đọc dữ liệu từ tập tin SharedPreference trong ứng dụng của bạn nhưng không được phép ghi dữ liệu.
MODE_WORLD_WRITEABLE Đây là chế độ lưu trữ cho phép các ứng dụng khác có thể ghi dữ liệu vào trong tập tin SharedPreference trong ứng dụng của bạn.

4. Ghi dữ liệu vào SharedPreferences

Để ghi dữ liệu vào một tập tin SharedPreferences trong Android bạn hãy tạo đối tượng SharedPreferences.Editor bằng cách gọi phương thức edit().

SharedPreferences sharedPref = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit(); 
editor.putString("url", "teamvietdev.com"); 
editor.putString("name", "Team Việt Dev"); 
editor.putBoolean("active", true); 
editor.commit();

Bảng sau liệt kê một số thuộc tính cơ bản được sử dụng trong SharedPreferences:

Thuộc tính Mô tả
apply() Cập nhật dữ liệu mà không cần trả về kết quả thực thi lệnh thành công hay thất bại.
commit() Cập nhật dữ liệu và trả về kết quả là true nếu thực thi lệnh thành công và trả về false nếu thất bại.
clear() Xóa toàn bộ dữ liệu trong Shared Preference.
remove(String key) Xóa dữ liệu trong Shared Preference dựa vào “key” tương ứng.
putString(String key, String value) Lưu trữ dữ liệu kiểu String theo “key – value”
putLong(String key, long value) Lưu trữ dữ liệu kiểu long theo “key – value”
putInt(String key, int value) Lưu trữ dữ liệu kiểu int theo “key – value”
putFloat(String key, float value) Lưu trữ dữ liệu kiểu float theo “key – value”
putBoolean(String key, float value) Lưu trữ dữ liệu kiểu boolean theo “key – value”

Phương thức commit() lưu trữ dữ liệu đồng bộ (synchronously) còn với apply() là không đồng bộ (asynchronously). Sử dụng phương thức apply() sẽ thực thi lệnh nhanh hơn so với commit().

5. Đọc dữ liệu từ SharedPreferences:

Đọc dữ liệu từ SharedPreferences thì gọi phương thức như sau:

get<TypeData>("key_name", "value_default");

Bạn có thể gán dữ liệu mặc định trong “value_default” nếu dữ liệu trả về trong “key_name” không lấy được hoặc rỗng.

SharedPreferences sharedPref = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);
String url = sharedPref.getString("url", "");
String name = sharedPref.getString("name", "");
boolean active = sharedPref.getBoolean("active", false);

Lời kết: Như vậy có nhiều cách để thực hiện lưu trữ và truy xuất dữ liệu như sử dụng SQLite, Realm hoặc có thể là sử dụng SharedPreferences trong Android tùy theo mục đích sử dụng mà bạn chọn thư viện phù hợp. Hẹn gặp lại các bạn trong các bài viết tiếp theo trong chuyên mục lập trình Android với nhiều bài viết hướng dẫn, tài liệu, lập trình Android.

(Tác giả: Team Việt Dev)

Bình luận