Nếu có một tập hợp khoá-giá trị tương đối nhỏ cần lưu, bạn nên sử dụng các API SharedPreferences
. Đối tượng SharedPreferences
trỏ đến một tệp chứa các cặp khoá-giá trị và cung cấp các phương thức đơn giản để đọc và ghi các cặp khoá đó. Mỗi tệp SharedPreferences
do khung này quản lý và có thể ở chế độ riêng tư hoặc dùng chung.
Trang này cho bạn biết cách sử dụng các API SharedPreferences
để lưu trữ và truy xuất các giá trị đơn giản.
Tìm hiểu và học cách xử lý lựa chọn ưu tiên dùng chung
Bạn có thể tạo tệp lựa chọn ưu tiên dùng chung mới hoặc truy cập vào một tệp hiện có bằng cách gọi một trong các phương thức sau:
getSharedPreferences()
: Sử dụng phương thức này nếu bạn cần nhiều tệp lựa chọn ưu tiên dùng chung được xác định theo tên mà bạn chỉ định bằng tham số đầu tiên. Bạn có thể gọi phương thức này từContext
bất kỳ trong ứng dụng của mình.getPreferences()
: Sử dụng phương thức này từActivity
nếu bạn chỉ cần sử dụng một tệp lựa chọn ưu tiên dùng chung cho hoạt động. Vì phương thức này truy xuất tệp lựa chọn ưu tiên chung mặc định thuộc về hoạt động, nên bạn không cần cung cấp tên.
Ví dụ: Mã sau đây truy cập vào tệp lựa chọn ưu tiên dùng chung mà chuỗi tài nguyên R.string.preference_file_key
xác định và mở bằng chế độ riêng tư để chỉ ứng dụng của bạn mới có thể truy cập vào tệp:
Kotlin
val sharedPref = activity?.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE)
Java
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE);
Khi đặt tên cho tệp lựa chọn ưu tiên dùng chung, bạn nên sử dụng tên có thể xác định danh tính chính xác đối với ứng dụng của mình. Thêm tiền tố là ID ứng dụng vào tên tệp sẽ giúp bạn dễ dàng thực hiện việc này. Ví dụ: "com.example.myapp.PREFERENCE_FILE_KEY"
Ngoài ra, nếu chỉ cần một tệp lựa chọn ưu tiên dùng chung cho hoạt động của mình, bạn có thể sử dụng phương thức getPreferences()
:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Nếu đang sử dụng API SharedPreferences
để lưu chế độ cài đặt ứng dụng, thì bạn nên sử dụng getDefaultSharedPreferences()
để tải tệp lựa chọn ưu tiên dùng chung mặc định cho toàn bộ ứng dụng của mình. Để biết thêm thông tin, hãy xem bài viết Hướng dẫn cho nhà phát triển về các chế độ cài đặt.
Ghi vào lựa chọn ưu tiên dùng chung
Để ghi vào tệp lựa chọn ưu tiên dùng chung, hãy tạo SharedPreferences.Editor
bằng cách gọi edit()
trên SharedPreferences
của bạn.
Truyền các khoá và giá trị mà bạn muốn ghi bằng các phương thức như: putInt()
và putString()
. Sau đó, hãy gọi apply()
hoặc commit()
để lưu các thay đổi. Ví dụ:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_high_score_key), newHighScore) apply() }
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score_key), newHighScore); editor.apply();
apply()
thay đổi ngay đối tượng SharedPreferences
trong bộ nhớ nhưng ghi nội dung cập nhật vào ổ đĩa một cách không đồng bộ. Ngoài ra, bạn có thể sử dụng commit()
để ghi dữ liệu vào ổ đĩa một cách đồng bộ. Tuy nhiên, commit()
có tính đồng bộ nên bạn cần tránh gọi từ luồng chính, vì tính năng này có thể tạm dừng việc hiển thị giao diện người dùng.
Đọc từ lựa chọn ưu tiên dùng chung
Để truy xuất các giá trị từ một tệp lựa chọn ưu tiên dùng chung, hãy gọi các phương thức như getInt()
và getString()
, cung cấp khoá cho giá trị bạn muốn và có thể chọn làm giá trị mặc định để trả về nếu không có khoá. Ví dụ:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key) val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key); int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);