Zapisuj proste dane dzięki usłudze SharedPreferences

Jeśli masz stosunkowo mały zbiór par klucz-wartość, który chcesz zapisać, możesz użyć interfejsów API SharedPreferences. Obiekt SharedPreferences wskazuje plik zawierający pary klucz-wartość i udostępnia proste metody ich odczytu i zapisu. Każdy plik SharedPreferences jest zarządzany przez platformę i może być prywatny lub udostępniany.

Na tej stronie dowiesz się, jak używać interfejsów API SharedPreferences do przechowywania i pobierania prostych wartości.

Utwórz nick dla wspólnych preferencji

Możesz utworzyć nowy udostępniony plik ustawień lub uzyskać dostęp do istniejącego, wywołując jedną z tych metod:

  • getSharedPreferences(): użyj tej opcji, jeśli potrzebujesz wielu udostępnionych plików ustawień określonych przez nazwę określoną przy użyciu pierwszego parametru. Możesz wykonać tę czynność z dowolnego miejsca Context w swojej aplikacji.
  • getPreferences(): użyj tej opcji w Activity, jeśli chcesz użyć tylko 1 udostępnionego pliku ustawień dla aktywności. Spowoduje to pobranie domyślnego udostępnionego pliku ustawień, który należy do aktywności, więc nie musisz podawać jego nazwy.

Na przykład ten kod uzyskuje dostęp do pliku udostępnionych ustawień zidentyfikowanych przez ciąg znaków zasobu R.string.preference_file_key i otwiera go w trybie prywatnym, dzięki czemu jest dostępna 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);

Nadając nazwy udostępnionym plikom ustawień, używaj nazwy umożliwiającej identyfikację konkretnej aplikacji. Dobrym sposobem jest dodanie do nazwy pliku identyfikatora aplikacji. Przykład: "com.example.myapp.PREFERENCE_FILE_KEY"

Jeśli potrzebujesz tylko 1 udostępnionego pliku z ustawieniami aktywności, możesz też 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 SharedPreferences API, użyj narzędzia getDefaultSharedPreferences(), aby pobrać domyślny plik ustawień udostępnionych dla całej aplikacji. Więcej informacji znajdziesz w przewodniku dla programistów ustawień.

Zapisz we wspólnych preferencjach

Aby zapisać zmiany w udostępnionym pliku ustawień, utwórz SharedPreferences.Editor, wywołując edit() na urządzeniu SharedPreferences.

Przekaż klucze i wartości, które chcesz zapisać, za pomocą takich metod jak: putInt() i putString(). Następnie wywołaj 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 zapisuje aktualizacje na dysku asynchronicznie. Możesz też użyć polecenia commit(), aby synchronicznie zapisywać dane na dysku. Ponieważ jednak tag commit() jest synchroniczny, nie należy wywoływać go z wątku głównego, ponieważ może to wstrzymać renderowanie interfejsu.

Czytaj z udostępnianych ustawień

Aby pobrać wartości z udostępnionego pliku ustawień, wywołaj metody takie jak getInt() i getString(), podając klucz odpowiedniej wartości i opcjonalnie wartość domyślną zwracaną w przypadku braku klucza. 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);