Comment utilisez-vous SharedPreferences dans une classe non-Activity? J'ai essayé de créer une classe utilitaire de préférences générique et d'importer Android.content.Context
mais Eclipse ne m'a toujours pas laissé utiliser getSharedPreferences()
.
Les références partagées sont liées au contexte . Vous pouvez le référencer uniquement via un contexte.
Vous pouvez simplement passer le contexte en tant que paramètre à votre classe ..__, par exemple dans le constructeur.
Dans votre activité, faites-vous:
MyClass myClass = new MyClass(this);
La solution que j'ai trouvée à ceci était:
1-Dans une classe MainActivity (c.-à-d. Toujours lancé avant d’obtenir un contexte dans un projet), créez une variable statique pour le contexte:
public static Context contextOfApplication;
2-Dans une méthode importante de cette classe (comme onCreate, le constructeur, etc.), initialisez cette variable à l'aide de la méthode getApplicationContext:
public void onCreate() {
contextOfApplication = getApplicationContext();
}
3-Dans la même classe Créez une méthode "getter" pour cette variable (elle doit aussi être statique):
public static Context getContextOfApplication(){
return contextOfApplication;
}
4-Dans la classe de non-activité, obtenez le contexte en appelant la méthode créée de manière statique:
Context applicationContext = MyActivityClass.getContextOfApplication()
;
5-Utilisez la classe PreferenceManager pour obtenir la variable SharedPreferences:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
J'espère que ça aide.
Essayez d’utiliser les préférences par défaut avec un contexte d’application. Un contexte est similaire à l'environnement dans lequel une application s'exécute sous Linux ou Windows (par exemple, des variables d'environnement telles que le style de fenêtre PATH ou la taille de la console). Chaque activité et service a également son propre contexte, par exemple l'orientation de l'écran, le thème et l'étiquette, etc. Mais pour votre application, vous ne voulez pas le contexte de l'activité, vous voulez quelque chose de global pour l'application, c'est ici context .getApplicationContext () est utile. C'est la même chose dans l'application et vous obtiendrez toujours les mêmes préférences par défaut.
utilisez ce code pour une nouvelle 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();
}
}
crée une classe SharedPreferences
/**
* @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();
}
Commencez par déclarer un attribut privé dans votre classe. Dans mon cas, j'ai une 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;
}
Puis, quand utiliser les SharedPreferences:
ctx.getSharedPreferences("com.joninazio.euskofest.UsingPreferences_preferences", Context.MODE_PRIVATE)
Cela fonctionne au moins pour moi :)
Dans Kotlin, vous pouvez faire ceci:
val myClass = MyClass(this)
Maintenant, voici comment vous pouvez obtenir un contexte en classe
class MyClass(context: Context) {
val context: Context = context
}
Maintenant, pour obtenir les préférences partagées avec le contexte, procédez comme suit:
context.getSharedPreferences(...)
Utilisez ce code pour obtenir la context
de l'activité.
if (context != null) {
SharedPreferences sharedPrefs = context.getSharedPreferences("YOUR.PACKAGE.NAME", MODE_PRIVATE);
}
Utilisation d'une méthode statique pour utiliser SharedPreference _ sans objet de contexte expliqué here
Dans MainActivity avant OnCreate
public static SharedPreferences preferences;
Dans la méthode OnCreate, ajoutez
preferences = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);
Créez une classe PreferenceHelper avec des méthodes statiques de Getters et Setters
public class PreferenceHelper {
final public static String KEY_DEMO_NAME = "Demo Name";
public static void setName(String value) {
MainActivity.preferences.edit().putString(KEY_DEMO_NAME, value ).commit();
}
public static String getName() {
return MainActivity.preferences.getString(KEY_DEMO_NAME,"");
}
}