Zapisuj proste dane dzięki usłudze SharedPreferences

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ądzenia Context w swojej aplikacji.
  • getPreferences(): w razie potrzeby użyj tej opcji z Activity 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);