Come utilizzare SharedPreferences in una classe non-Activity? Ho provato a creare una classe di utilità Preferenze generica e a importare android.content.Context
, ma Eclipse non mi permetteva ancora di usare getSharedPreferences()
.Android - Come usare SharedPreferences nella classe non-Activity?
risposta
SharedPreferences sono correlate al contesto. È possibile fare riferimento solo attraverso un contesto.
È sufficiente passare il contesto come parametro alla classe. Ad esempio nel costruttore.
Nella vostra attività fare:
MyClass myClass = new MyClass(this);
Provare a utilizzare default preferences con un contesto applicazione. Un contesto è simile all'ambiente in cui un'applicazione viene eseguita su linux o windows (ad esempio variabili di ambiente come lo stile di finestre PATH o le dimensioni della console). Ogni attività e servizio ha anche il proprio contesto, ad esempio orientamento dello schermo, tema ed etichetta, ecc. Ma per la tua applicazione non vuoi il contesto dell'attività, vuoi qualcosa di globale per l'app, questo è il punto in cui è utile context.getApplicationContext() . Questo è lo stesso in tutta l'app e ti darà sempre le stesse preferenze predefinite.
Puoi approfondire? Ho provato 'SharedPreferences prefs = getDefaultSharedPreferences (this);' ma non funziona. –
Ho ampliato la mia risposta. –
Usa 'PreferenceManager.getDefaultSharedPreferences (applicationContext);' non importa dove ti trovi nel codice richiede un contesto per usare le Preferenze. –
La soluzione che ho trovato per questo è stato:
1-In una classe MainActivity (cioè lanciato sempre prima di ottenere qualsiasi contesto in progetto) creare una variabile statica per contesto:
public static Context contextOfApplication;
2-In un metodo Importanti di questa classe (come onCreate, il costruttore, ecc) initi alize questa variabile con il metodo getApplicationContext:
public void onCreate() {
contextOfApplication = getApplicationContext();
}
3-Nella stessa classe creare un metodo "getter" per questa variabile (deve essere statico):
public static Context getContextOfApplication(){
return contextOfApplication;
}
4-Nel non -activity class ottiene il contesto chiamando staticamente il metodo creato:
Context applicationContext = MyActivityClass.getContextOfApplication()
;
5-Utilizzare il PreferenceManager classe per ottenere la variabile SharedPreferences:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
Speranza che aiuta.
Questa è una soluzione alternativa utile, suggerirei di utilizzare contextOfApplication come campo privato – FredMaggiowski
Puoi anche utilizzare applicationContext.getSharedPreferences (pref_name, MODE_PRIVATE); –
Innanzitutto, dichiara un attributo privato nella classe. Nel mio caso, ho una classe BaseAdapter:
private final Context ctx;
private final Vector<Acto> actos;
public ActoAdaptador(Context ctx, Vector<Acto> as) {
super();
this.ctx = ctx;
this.actos = as;
}
Poi, quando utilizzare i SharedPreferences:
ctx.getSharedPreferences("com.joninazio.euskofest.UsingPreferences_preferences", Context.MODE_PRIVATE)
In questo modo funziona per me almeno :)
Usa questo codice per un nuova classe.
import android.content.Context;
import android.content.SharedPreferences;
/**
* Created by Atiar Talukdar on 6/5/2017.
*/
public class TemporaryStorageSharedPreference {
protected final static int DEFAULT = 0;
int temp = 0;
public int readSharedPreference(Context context, String spName,String key){
SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
return temp = sharedPreferences.getInt(key,DEFAULT);
}
public void writeSharedPreference(Context context,String ammount,String spName,String key){
SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(key, DEFAULT);
editor.commit();
}
}
creare SharedPreferences classe
/**
* @param mContext
* @param key
* @param value
*/
public static void savePreferences(Context mContext, String key, String value) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value).apply();
}
/**
* @param context
* @param keyValue
* @return
*/
public static String getPreferences(Context context, String keyValue) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
return sharedPreferences.getString(keyValue, "");
}
/**
* @param mContext
*/
public static void removeAllSharedPreferences(Context mContext) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear().apply();
}
- 1. Classe helper SharedPreferences
- 2. android sharedpreferences valore impostato
- 3. Come utilizzare SharedPreferences
- 4. SharedPreferences Android in Fragment
- 5. Limitazioni di SharedPreferences Android?
- 6. Android: Copia/Duplica SharedPreferences
- 7. Limite dimensioni sharedpreferences Android
- 8. Come utilizzare SharedPreferences in Xamarin.Android?
- 9. Test unità Android: come cancellare SharedPreferences
- 10. Che cos'è SharedPreferences in Android?
- 11. android SharedPreferences putStringSet order/sort
- 12. android - sharedpreferences restituisce valore nullo
- 13. android come posso usare la classe ObjectAnimator per Android 2.2
- 14. Usa l'estensione Kotlin nella classe java android
- 15. SharedPreferences Android, come salvare una semplice variabile int
- 16. Come archiviare e recuperare bitmap in sharedPreferences in Android?
- 17. Android: modifica SharedPreferences di un'altra app
- 18. Android: utilizzo di SharedPreferences in una libreria
- 19. equivalente a iOS di SharedPreferences di Android
- 20. Possiamo usare Optionals nella programmazione Android?
- 21. Salvare i file SharedPreferences nella directory personalizzata o ottenere la directory SharedPreferences predefinita
- 22. Android: come usare CursorAdapter?
- 23. Qualcosa come Android-SharedPreferences su Windows Store Apps?
- 24. Memorizza cookie in sharedpreferences
- 25. SharedPreferences file
- 26. Come analizzare ANR in sharedPreferences
- 27. Come usare la classe .clearfix?
- 28. SharedPreferences legge valori precedenti
- 29. SharedPreferences non persistente
- 30. Posso usare la parola chiave `abstract` nella classe C++
Aha! Era esattamente quello che stavo cercando. Grazie per la risposta semplice e chiara. Ora posso accedervi usando 'context.getSharedPreferences();'. –
errore era MODE_PRIVATE non può essere risolto a una variabile – Prasad
La mia attività non consente un 'this' nel mio altro costruttore di classe (la classe con' SharedPreferences'). – Azurespot