Jaki jest najlepszy sposób wykonywania „ustawień aplikacji” w systemie Android? [Zamknięte]

108

Chciałbym zapisać niektóre ustawienia aplikacji (takie jak adres URL interfejsu API i niektóre ustawienia do testowania) dla aplikacji na Androida.

Pracuję głównie jako programista .NET , więc jestem przyzwyczajony do używania tego pliku app.configdo tego celu. Jaki jest dobry sposób na zrobienie tego w systemie Android?

Tim Almond
źródło

Odpowiedzi:

148

Wiele aplikacji może zapewniać sposób przechwytywania preferencji użytkownika dotyczących ustawień określonej aplikacji lub działania. W tym celu system Android udostępnia prosty zestaw interfejsów API.

Preferencje to zazwyczaj pary nazwa-wartość. Można je przechowywać jako „Preferencje współdzielone” w różnych działaniach w aplikacji (należy pamiętać, że obecnie nie można ich udostępniać między procesami). Lub może to być coś, co musi być przechowywane specyficznie dla działania.

  1. Preferencje współdzielone: ​​Preferencje współdzielone mogą być używane przez wszystkie składniki (działania, usługi itp.) Poza aplikacjami.

  2. Preferencje obsługi działania: Preferencje te mogą być używane tylko w działaniu i nie mogą być używane przez inne składniki aplikacji.

Wspólne preferencje:

Wspólnymi preferencjami zarządza się za pomocą getSharedPreferencesmetody Contextklasy. Preferencje są przechowywane w domyślnym pliku (1) lub możesz określić nazwę pliku (2), która będzie używana do odwoływania się do preferencji.

(1) Oto, w jaki sposób otrzymujesz instancję po określeniu nazwy pliku

public static final String PREF_FILE_NAME = "PrefFile";
   SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATEto tryb działania dla preferencji. Jest to tryb domyślny i oznacza, że ​​utworzony plik będzie dostępny tylko dla aplikacji wywołującej. Inne obsługiwane dwa tryby to MODE_WORLD_READABLEi MODE_WORLD_WRITEABLE. W MODE_WORLD_READABLEinnej aplikacji można odczytać utworzony plik, ale nie może go modyfikować. W przypadku MODE_WORLD_WRITEABLEinnych aplikacji posiadamy również uprawnienia do zapisu do utworzonego pliku.

(2) Zalecanym sposobem jest użycie trybu domyślnego, bez określania nazwy pliku

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

Na koniec, gdy masz instancję preferencji, oto jak możesz odzyskać zapisane wartości z preferencji:

 int storedPreference = preferences.getInt("storedInt", 0);

Aby przechowywać wartości w pliku preferencji, SharedPreference.Editornależy użyć obiektu pliku preferencji . Editorto zagnieżdżony interfejs SharedPreferenceklasy.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Edytor obsługuje również metody takie jak remove()i clear()do usuwania wartości preferencji z pliku.

Preferencje dotyczące aktywności:

Wspólne preferencje mogą być używane przez inne składniki aplikacji. Ale jeśli nie musisz dzielić się preferencjami z innymi komponentami i chcesz mieć prywatne preferencje. Możesz to zrobić za pomocą getPreferences()metody ćwiczenia. getPreferenceMetoda wykorzystujegetSharedPreferences() metodę o nazwie klasy aktywności dla nazwy pliku preferencji.

Poniżej znajduje się kod do uzyskiwania preferencji

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

Kod do przechowywania wartości jest również taki sam jak w przypadku wspólnych preferencji.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Możesz także użyć innych metod, takich jak przechowywanie stanu aktywności w bazie danych. Uwaga Android zawiera również pakiet o nazwieandroid.preference . Pakiet definiuje klasy do implementacji interfejsu użytkownika preferencji aplikacji.

Aby zobaczyć więcej przykładów, zapoznaj się z postem dotyczącym przechowywania danych Androida na stronie programistów.

Pentium10
źródło
1
dzięki. Wygląda na to, że muszę użyć pliku XML do tego, czego szukam (lub może używam XML jako danych do wstępnego załadowania), ale elementy preferencji są przydatne w innej części mojego projektu.
Tim Almond
1
Możesz użyć pliku xml do init. Musisz zadzwonić na coś takiego jakPreferenceManager.setDefaultValues(this, R.xml.profiles_preferences, false);
Pentium10
3
Ten przewodnik też może być przydatny: developer.android.com/guide/topics/ui/settings.html
Hung Tran,
1
+1. Tylko jeden kawałek, o którym warto pamiętać. Po ustawieniu wartości w preferencesobiekcie editor.apply()zalecane jest wywołanie, editor.commit()ponieważ pierwsze zajmie się zapisem w tle.
Anindya Chatterjee
2
Jestem tu trochę zdezorientowany. SharedPreferences służy do przechowywania ustawień użytkownika w aplikacji, a nie ustawień aplikacji. Użytkownik (i ja też) zastanawialiśmy się, gdzie przechowywać ustawienia aplikacji, np. Adres URL interfejsu API lub inne ustawienia, których aplikacja używa do prawidłowego działania.
albanx