You are on page 1of 24

Phát triển ứng dụng cho

thiết bị di động
Shared Preference
Note
❖ Các slide trong bài giảng này dựa trên các bài
thực hành của Google Android Labs
❖ Original slides:
https://drive.google.com/drive/folders/1eu-
LXxiHocSktGYpG04PfE9Xmr_pBY5P

2
9.1 Shared Preferences

3
Nội dung
● Shared Preferences
● Lắng nghe những thay đổi trên Shared
Preferences

4
Định nghĩa Shared Preferences
● Đọc và ghi một lượng nhỏ primitive data dưới
dạng các cặp khóa / giá trị (key/value) vào một
tệp trên bộ nhớ của thiết bị
● Lớp SharedPreference cung cấp các API để đọc,
ghi và quản lý dữ liệu này
● Lưu dữ liệu hàm onPause() và khôi phục dữ liệu
trong hàm onCreate()
5
Shared Preferences và Saved Instance State

● Một vài cặp key/value


● Dữ liệu là riêng tư đối với ứng dụng

6
Shared Preferences vs. Saved Instance State

● Duy trì dữ liệu trên các phiên ● Lưu trữ dữ liệu trạng thái
người dùng, ngay cả khi ứng trên các phiên bản hoạt
dụng bị tắt và khởi động lại động trong cùng một
hoặc thiết bị được khởi động phiên người dùng
lại ● Dữ liệu không được ghi
● Dữ liệu cần được ghi nhớ nhớ trong các phiên,
qua các phiên, chẳng hạn chẳng hạn như tab hiện
như cài đặt ưa thích của được chọn hoặc trạng
người dùng hoặc điểm trò thái hoạt động hiện tại.
chơi của họ
● Công dụng phổ biến là
● Việc sử dụng phổ biến là lưu khôi phục lại trạng thái
trữ các tùy chọn của người sau khi xoay thiết bị
dùng 7
Tạo Shared Preferences
● Chỉ cần duy nhất một file Shared Preferences file
cho cả ứng dụng
● Đặt tên file bằng tên gói ứng dụng : độc đáo và dễ
kết hợp với ứng dụng
● Đối số MODE cho getSharedPreferences () là để
tương thích ngược : chỉ sử dụng
MODE_PRIVATE để được bảo mật

8
getSharedPreferences()

private String sharedPrefFile =


"com.example.android.hellosharedprefs";
mPreferences =
getSharedPreferences(sharedPrefFile,
MODE_PRIVATE);
9
Lưu dữ liệu trong Shared
Preferences

● SharedPreferences.Editor interface

● Thực hiện tất cả các thao tác với file

● Các phương thức sẽ ghi đè nếu khóa tồn tại

● apply() lưu bán đồng bộ và an toàn

10
SharedPreferences.Editor
@Override
protected void onPause() {
super.onPause();
SharedPreferences.Editor preferencesEditor =
mPreferences.edit();
preferencesEditor.putInt("count", mCount);
preferencesEditor.putInt("color", mCurrentColor);
preferencesEditor.apply();
}

11
Khôi phục Shared Preferences

● Khôi phục trong hàm onCreate() của Activity

● Các phương thức Get có hai đối số — khóa và giá


trị mặc định nếu không tìm thấy khóa
● Sử dụng đối số mặc định để không phải kiểm tra
xem tùy chọn có tồn tại trong tệp hay không

12
Lấy dữ liệu trong hàm onCreate()

mPreferences = getSharedPreferences(sharedPrefFile, MODE_PRIVATE);


if (savedInstanceState != null) {
mCount = mPreferences.getInt("count", 1);
mShowCount.setText(String.format("%s", mCount));

mCurrentColor = mPreferences.getInt("color", mCurrentColor);


mShowCount.setBackgroundColor(mCurrentColor);

mNewText = mPreferences.getString("text", "");


} else { … }

13
Xóa dữ liệu

● Gọi hàm clear() của SharedPreferences.Editor

● Có thể kết hợp cả ghi và xóa dữ liệu. Tuy nhiên


khi gọi apply(), clear() luôn được thực hiện đầu
tiên, bất kể thứ tự!

14
clear()

SharedPreferences.Editor preferencesEditor
=
mPreferences.edit();
preferencesEditor.clear();
preferencesEditor.apply();
15
Lắng nghe các
thay đổi

16
Lắng nghe các thay đổi
● Thực hiện interface
SharedPreference.OnSharedPreferenceChangeLi
stener
● Đăng ký listener với
registerOnSharedPreferenceChangeListener()
● Đăng ký và hủy đăng ký listener trong hàm
onResume() và hàm onPause()
● Thực hiện hàm callback
onSharedPreferenceChanged() 17
Interface và callback
public class SettingsActivity extends AppCompatActivity
implements OnSharedPreferenceChangeListener { ...

public void onSharedPreferenceChanged(


SharedPreferences sharedPreferences, String key) {
if (key.equals(MY_KEY)) {
// Do something
}
}
}

18
Tạo và đăng ký listener

SharedPreferences.OnSharedPreferenceChangeListener listener =
new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(
SharedPreferences prefs, String key) {
// Implement listener here
}
};
prefs.registerOnSharedPreferenceChangeListener(listener);

19
Cần một tham chiếu MẠNH đến listener

● Khi đăng ký listener, the preference manager sẽ


không lưu trữ tham chiếu mạnh đến listener
● Bạn phải lưu trữ một tham chiếu mạnh mẽ cho
listener, nếu không nó sẽ dễ bị dọn dẹp bởi
garbage collection
● Giữ tham chiếu đến listener trong một đối tượng
cần tồn tại khi ta vẫn cần listener

20
Bài tập thực hành :
HelloSharedPrefs

● Bổ sung Shared Preferences vào


starter app

● Bổ sung nút "Reset" để xóa các


app state và preferences của app

21
Tìm hiểu thêm
● Saving Data
● Storage Options
● Saving Key-Value Sets
● SharedPreferences
● SharedPreferences.Editor
Stackoverflow
● How to use SharedPreferences in Android to store, fetch and edit values
● onSavedInstanceState vs. SharedPreferences

22
Tiếp theo?

● Bài học lý thuyết : 9.1 Shared Preferences


● Bài tập thực hành : 9.1 Shared Preferences

23
END

24

You might also like