Zapisuj proste dane dzięki usłudze SharedPreferences

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 elementu Context w aplikacji.
  • getPreferences(): użyj tego ustawienia w Activity, 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()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);