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 miejscaContext
w swojej aplikacji.getPreferences()
: użyj tej opcji wActivity
, 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);