Jeśli chcesz zapisać stosunkowo niewielką kolekcję par klucz-wartość,
możesz używać interfejsów API SharedPreferences
. Obiekt SharedPreferences
wskazuje plik zawierający pary klucz-wartość i udostępnia proste metody odczytu
i je napisać. Każdy plik SharedPreferences
jest zarządzany przez platformę,
mogą być prywatne lub udostępnione.
Z tej strony dowiesz się, jak używać interfejsów API SharedPreferences
do przechowywania
są proste wartości.
Poznaj wspólne preferencje
Możesz utworzyć nowy plik udostępnionych ustawień lub uzyskać dostęp do istniejącego pliku, wywołując jedną z tych metod:
getSharedPreferences()
: użyj tej opcji, jeśli potrzebujesz wielu udostępnianych plików preferencji oznaczonych jako pierwsze, . Możesz to zrobić z dowolnego urządzeniaContext
w swojej aplikacji.getPreferences()
: w razie potrzeby użyj tej opcji zActivity
używanie tylko jednego udostępnionego pliku ustawień dla aktywności. Ponieważ pobiera domyślny plik ustawień udostępnionych, który należy do aktywności, nie musisz podawać nazwy.
Na przykład ten kod uzyskuje dostęp do udostępnionego pliku ustawień, który
zidentyfikowany przez ciąg zasobu R.string.preference_file_key
i otwiera go
w trybie prywatnym, aby plik był dostępny tylko dla Twojej aplikacji:
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);
Nazywając pliki wspólnych ustawień, użyj unikalnej nazwy
być łatwy do zidentyfikowania przez aplikację. Aby to zrobić, poprzedź nazwę pliku prefiksem
identyfikator aplikacji. Na przykład:
"com.example.myapp.PREFERENCE_FILE_KEY"
Jeśli zaś potrzebujesz tylko jednego udostępnionego pliku ustawień dla aktywności,
możesz użyć metody getPreferences()
:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Jeśli do zapisywania ustawień aplikacji używasz interfejsu API SharedPreferences
,
powinien zamiast tego użyć getDefaultSharedPreferences()
, aby uzyskać domyślną wartość
udostępniony plik preferencji dla całej aplikacji. Więcej informacji:
Przewodnik po ustawieniach dla programistów
Zapisz w ramach wspólnych preferencji
Aby zapisywać zmiany w udostępnionym pliku ustawień, utwórz SharedPreferences.Editor
aby zadzwonić pod numer edit()
na urządzeniu SharedPreferences
.
Przekaż klucze i wartości, które chcesz zapisać, na przykład za pomocą tych metod:
putInt()
i putString()
. Następnie zadzwoń pod numer apply()
lub
commit()
, aby zapisać zmiany. Na przykład:
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();
Funkcja apply()
natychmiast zmienia w pamięci obiekt SharedPreferences
, ale
asynchronicznie zapisuje aktualizacje na dysku. Możesz też użyć usługi commit()
aby synchronicznie zapisać dane na dysku. Ale ze względu na to, że funkcja commit()
jest synchroniczna,
unikaj wywoływania go z wątku głównego, ponieważ może to wstrzymać interfejs
jak renderowanie.
Czytaj z udostępnionych ustawień
Aby pobrać wartości z udostępnianego pliku ustawień, użyj takich metod jak
getInt()
i getString()
, będące kluczem dla wartości,
i opcjonalnie zwracana wartość domyślna, która zostanie zwrócona, jeśli klucz nie istnieje. Dla:
przykład:
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);