Android - comment utiliser SharedPreferences en classe non-activité?
comment utiliser les références partagées dans une classe sans activité? J'ai essayé de faire une classe D'utilité de préférences génériques et d'importer android.content.Context
mais Eclipse ne me laisse pas utiliser getSharedPreferences()
.
9 réponses
les références partagées sont liées au contexte. Vous ne pouvez y faire référence qu'à travers un contexte.
Vous pouvez simplement passer le contexte comme paramètre à votre classe. Par exemple dans le constructeur.
dans votre activité faites:
MyClass myClass = new MyClass(this);
La solution que j'ai trouvé c'est:
1-dans une classe D'activité principale(I. créer 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 en utilisant la méthode getApplicationContext:
public void onCreate() {
contextOfApplication = getApplicationContext();
}
3-dans la même classe créer une méthode "getter" pour cette variable (elle doit aussi être statique):
public static Context getContextOfApplication(){
return contextOfApplication;
}
4 - dans la classe non-activity, récupérez le contexte en appelant statiquement la méthode créée:
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 préférences par défaut avec un contexte d'Application. Un contexte est similaire à l'environnement dans lequel une application tourne sous linux ou windows (par exemple des variables d'environnement comme le style PATH windowing ou la taille de la console). Chaque activité et Service a son propre contexte, par exemple l'orientation vers l'écran, le thème, l'étiquette, etc. mais pour votre application, vous ne voulez pas le contexte de l'Activité, vous voulez quelque chose de global à l'application, c'est là contexte.getcontexteapplication() est utile. Ceci est le même dans toute l'application et vous donnera 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();
}
}
d'abord, déclarez 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;
}
alors, quand utiliser les références partagées:
ctx.getSharedPreferences("com.joninazio.euskofest.UsingPreferences_preferences", Context.MODE_PRIVATE)
de Cette façon, les œuvres du moins pour moi :)
créer 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();
}
utilisation d'une méthode statique pour utiliser SharedPreferenceSans objet de contexte expliqué ici
MainActivity avant OnCreate
public static SharedPreferences preferences;
OnCreate méthode ajouter
preferences = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);
Créer un PreferenceHelper Classe 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,"");
}
}
utilisez ce code pour obtenir le context
de l'activité.
if (context != null) {
SharedPreferences sharedPrefs = context.getSharedPreferences("YOUR.PACKAGE.NAME", MODE_PRIVATE);
}
Dans Kotlin vous pouvez faire ceci:
val myClass = MyClass(this)
maintenant c'est comme ça que vous pouvez obtenir le contexte dans la classe
class MyClass(context: Context) {
val context: Context = context
}
maintenant, pour obtenir les préférences partagées avec le contexte, vous pouvez faire ceci:
context.getSharedPreferences(...)