Domanda

Sto utilizzando PreferenceActivity per mostrare alcune impostazioni per la mia applicazione.Sto gonfiando le impostazioni tramite un file xml in modo che il mio onCreate (e i metodi di classe completi) assomigli a questo:

public class FooActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.preference);
    }
}

Il Javadoc di PreferenzaAttività PreferenceFragment afferma che

Queste preferenze verranno salvate automaticamente in SharedPreferences man mano che l'utente interagisce con esse.Per recuperare un'istanza di SharedPreferences che verrà utilizzata dalla gerarchia delle preferenze in questa attività, chiama getDefaultSharedPreferences(android.content.Context) con un contesto nello stesso pacchetto di questa attività.

Ma come ottengo il nome di SharedPreference in un'altra attività?Posso solo chiamare

getSharedPreferences(name, mode)

nell'altra attività ma ho bisogno del nome di SharedPreference utilizzato da PreferenceActivity.Qual è il nome o come posso recuperarlo?

È stato utile?

Soluzione

import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

Aggiornamento

Secondo Preferenze condivise | Android Developer Tutorial (Parte 13) di Sai Geetha M N,

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

Le preferenze sono in genere coppie nome-valore.Possono essere archiviati come "preferenze condivise" tra varie attività in un'applicazione (nota attualmente che non può essere condivisa tra i processi).Oppure può essere qualcosa che deve essere archiviato specifico per un'attività.

  1. Preferenze condivise:Le preferenze condivise possono essere utilizzate da tutte le componenti (attività, servizi, ecc.) delle applicazioni.

  2. Preferenze gestite dall'attività:Queste preferenze possono essere utilizzate solo all'interno di una particolare attività e non possono essere utilizzate da altri componenti dell'applicazione.

Preferenze condivise:

Le preferenze condivise vengono gestite con l'aiuto di getSharedPreferences metodo del Context classe.Le preferenze vengono memorizzate in un file predefinito (1) oppure è possibile specificare un nome file (2) da utilizzare per fare riferimento alle preferenze.

(1) Il modo consigliato è da utilizzare per impostazione predefinita, senza specificare il nome del file

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(2) 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 significa che al file creato potrà accedere solo l'applicazione chiamante.Sono supportate altre due modalità MODE_WORLD_READABLE E MODE_WORLD_WRITEABLE.In MODE_WORLD_READABLE un'altra applicazione può leggere il file creato ma non può modificarlo.In caso di MODE_WORLD_WRITEABLE anche altre applicazioni dispongono dei permessi di scrittura per il file creato.

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

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

A memorizzare valori nel file delle preferenze SharedPreference.Editor l'oggetto deve essere utilizzato. Editor è un'interfaccia nidificata nel file SharedPreference classe.

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 i valori delle preferenze 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 desideri avere preferenze private sulle attività, puoi farlo con l'aiuto di getPreferences() modalità dell'attività.IL getPreference il metodo utilizza il file 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 delle preferenze condivise.

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

Puoi anche utilizzare altri metodi come la memorizzazione dello 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 Android Archivio dati pubblicare sul sito degli sviluppatori.

Altri suggerimenti

Se non si ha accesso a getDefaultSharedPreferenes(), è possibile utilizzare getSharedPreferences(name, mode) invece, è sufficiente passare il nome giusto.

Android crea questo nome (possibilmente in base al nome del pacchetto del progetto?). È possibile ottenere inserendo il seguente codice in un SettingsActivity onCreate(), e vedere cosa è preferencesName.

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

La stringa dovrebbe essere qualcosa di simile com.example.projectname_preferences. codice rigido che da qualche parte nel progetto, e passarlo a getSharedPreferences() e si dovrebbe essere a posto.

Dichiarare questi metodi prima ..

public static void putPref(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getPref(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

Quindi chiamare questo quando si vuole mettere un pref:

putPref("myKey", "mystring", getApplicationContext());

chiamare questo quando si vuole ottenere un pref:

getPref("myKey", getApplicationContext());

o è possibile utilizzare questo oggetto https: //github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo che semplifica tutto ancora più

Esempio:

TinyDB tinydb = new TinyDB(context);

tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);

tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true); 

tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);

dover passare contesto in giro ovunque è davvero fastidioso me. il codice diventa troppo prolisso e ingestibile. Lo faccio in ogni progetto, invece ...

public class global {
    public static Activity globalContext = null;

e impostarlo nell'attività principale creare

@Override
public void onCreate(Bundle savedInstanceState) {
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            global.sdcardPath,
            ""));
    super.onCreate(savedInstanceState);

    //Start 
    //Debug.startMethodTracing("appname.Trace1");

    global.globalContext = this;

anche tutte le chiavi di preferenza dovrebbe essere indipendente dal linguaggio, sono scioccato nessuno ha detto che.

getText(R.string.yourPrefKeyName).toString()

ora chiamarla in modo molto semplice come questo in una sola riga di codice

global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);

se si dispone di una casella di controllo e si desidera recuperare il suo valore ovvero vero / falso in qualsiasi file java -

Usa -

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`

Aggiornato 2019

Puoi semplicemente usare PowerPreference biblioteca

https://github.com/AliEsaAssadi/Android-Power-Preference

Ottenere l'istanza delle preferenze condivise

Per ottenere l'istanza predefinita è sufficiente chiamare

PowerPreference.getDefaultFile()

O se desideri un file di preferenze specifico

PowerPreference.getFileByName(fileName)

Scrittura dei dati:

PowerPreference.getDefaultFile().put(key,value)

Ottenere dati

PowerPreference.getDefaultFile().getString(key,value)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top