Qual è il modo migliore per eseguire le "impostazioni dell'applicazione" in Android? [chiuso]


108

Vorrei memorizzare alcune impostazioni dell'applicazione (come l'URL di un'API e alcune impostazioni per il test) per un'applicazione Android.

Lavoro principalmente come sviluppatore .NET , quindi sono abituato a utilizzare il file app.configper questo scopo. Qual è un buon modo per farlo su Android?

Risposte:


148

Molte applicazioni possono fornire un modo per acquisire le preferenze dell'utente sulle impostazioni di un'applicazione o un'attività specifica. Per supportare ciò, Android fornisce un semplice set di API.

Le preferenze sono in genere coppie di valori di nome. Possono essere archiviate come "Preferenze condivise" tra varie attività in un'applicazione (si noti che attualmente non possono essere condivise tra i processi). Oppure può essere qualcosa che deve essere memorizzato in modo specifico per un'attività.

  1. Preferenze condivise: le preferenze condivise possono essere utilizzate da tutti i componenti (attività, servizi, ecc.) Al di fuori delle applicazioni.

  2. Preferenze gestite dall'attività: queste preferenze possono essere utilizzate solo con l'attività e non possono essere utilizzate da altri componenti dell'applicazione.

Preferenze condivise:

Le preferenze condivise vengono gestite con l'aiuto del getSharedPreferencesmetodo della Contextclasse. Le preferenze vengono memorizzate in un file predefinito (1) oppure è possibile specificare un nome file (2) da utilizzare per fare riferimento alle preferenze.

(1) Ecco come ottenere l'istanza quando si specifica il nome del file

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

MODE_PRIVATEè la modalità operativa per le preferenze. È la modalità predefinita e indica che il file creato sarà accessibile solo dall'applicazione chiamante. Altre due modalità supportate sono MODE_WORLD_READABLEe MODE_WORLD_WRITEABLE. In MODE_WORLD_READABLEaltre applicazioni è possibile leggere il file creato ma non modificarlo. In caso di MODE_WORLD_WRITEABLEaltre applicazioni hanno anche i permessi di scrittura per il file creato.

(2) Il modo consigliato è quello di utilizzare la modalità predefinita, senza specificare il nome del file

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

Infine, una volta ottenuta l'istanza delle preferenze, ecco come recuperare i valori memorizzati dalle preferenze:

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

Per memorizzare i valori nel file delle preferenze SharedPreference.Editorè necessario utilizzare l'oggetto. Editorè l'interfaccia nidificata della SharedPreferenceclasse.

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

L'editor supporta anche metodi come remove()e clear()per eliminare il valore della preferenza dal file.

Preferenze attività:

Le preferenze condivise possono essere utilizzate da altri componenti dell'applicazione. Ma se non hai bisogno di condividere le preferenze con altri componenti e vuoi avere attività private preferenze. Puoi farlo con l'aiuto del getPreferences()metodo dell'attività. Il getPreferencemetodo utilizza il getSharedPreferences()metodo con il nome della classe di attività per il nome del file delle preferenze.

Di seguito è riportato il codice per ottenere le preferenze

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

Anche il codice per memorizzare i valori è lo stesso del caso di preferenze condivise.

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

È inoltre possibile utilizzare altri metodi come memorizzare lo stato dell'attività nel database. Nota Android contiene anche un pacchetto chiamato android.preference. Il pacchetto definisce le classi per implementare l'interfaccia utente delle preferenze dell'applicazione.

Per vedere altri esempi, controlla il post di archiviazione dati di Android sul sito degli sviluppatori.


1
Grazie. Sembra che quello che devo fare sia utilizzare un file XML per quello che sto cercando (o forse uso l'XML come dati da caricare inizialmente), ma le preferenze sono utili per un'altra parte del mio progetto.
Tim Almond

1
Puoi usare il file xml per init. Devi chiamare qualcosa comePreferenceManager.setDefaultValues(this, R.xml.profiles_preferences, false);
Pentium10

3
Anche questa guida potrebbe essere utile: developer.android.com/guide/topics/ui/settings.html
Hung Tran

1
+1. Solo un piccolo pezzo da tenere a mente. Dopo aver impostato il valore in preferencesobject, editor.apply()si consiglia di chiamare in editor.commit()quanto il primo gestirà il salvataggio in background.
Anindya Chatterjee

2
Sono un po 'confuso qui. Le sharedPreferences servono per memorizzare le impostazioni utente sull'app, non le impostazioni delle app. L'utente (e anche io) si chiedeva dove memorizzare le impostazioni dell'app, ex URL dell'API o altre impostazioni che l'app utilizza per funzionare correttamente.
albanx
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.