Jeśli masz stosunkowo małą kolekcję par klucz-wartość, które chcesz zapisać, możesz użyć interfejsów API SharedPreferences
. Obiekt SharedPreferences
wskazuje plik zawierający pary klucz-wartość i zawiera proste metody odczytu i zapisu par. Każdy plik SharedPreferences
jest zarządzany przez platformę i może być prywatny lub udostępniony.
Z tej strony dowiesz się, jak używać interfejsów API SharedPreferences
do przechowywania i pobierania prostych wartości.
Pobieranie obiektu preferencji współdzielonych
Możesz utworzyć nowy plik wspólnych preferencji 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ępnionych plików ustawień o nazwie, które określasz w pierwszym parametrze. Możesz wywołać tę funkcję z dowolnego elementuContext
w aplikacji.getPreferences()
: użyj tego ustawienia wActivity
, jeśli chcesz używać tylko jednego wspólnego pliku preferencji dla danej aktywności. Ponieważ ta funkcja pobiera domyślny plik wspólnych preferencji należący do aktywności, nie musisz podawać nazwy.
Na przykład ten kod uzyskuje dostęp do udostępnionego pliku preferencji zidentyfikowanego przez ciąg znaków zasobu R.string.preference_file_key
i otwiera go w trybie prywatnym, dzięki czemu dostęp do pliku ma tylko Twoja aplikacja:
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);
Nadając nazwy plikom wspólnych ustawień, użyj nazwy, która pozwoli Ci jednoznacznie rozpoznać Twoją aplikację. Aby to zrobić, poprzedź nazwę pliku swoim identyfikatorem aplikacji. Na przykład:"com.example.myapp.PREFERENCE_FILE_KEY"
Jeśli potrzebujesz tylko jednego wspólnego pliku preferencji do swojej 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
, zamiast tego użyj getDefaultSharedPreferences()
, aby pobrać domyślny plik ustawień dla całej aplikacji. Więcej informacji znajdziesz w Przewodniku po ustawieniach dla programistów.
Zapisz udostępnione ustawienia
Aby zapisywać dane w udostępnionym pliku ustawień, utwórz SharedPreferences.Editor
, wywołując funkcję edit()
na urządzeniu SharedPreferences
.
Przekaż klucze i wartości, które chcesz zapisać, za pomocą takich metod jak: putInt()
czy putString()
. Następnie wybierz 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();
apply()
natychmiast zmienia w pamięci obiekt SharedPreferences
, ale asynchronicznie zapisuje aktualizacje na dysku. Możesz też użyć funkcji commit()
do synchronicznego zapisywania danych na dysku. Funkcja commit()
jest synchroniczna, więc nie należy jej wywoływać z wątku głównego, ponieważ może to spowodować wstrzymanie renderowania interfejsu.
Czytaj z udostępnionych ustawień
Aby pobrać wartości z wspólnego pliku preferencji, wywołaj metody takie jak getInt()
i getString()
, podając klucz do pożądanej wartości oraz opcjonalnie wartość domyślną do zwrócenia, jeśli klucz jest nieobecny. 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);