web-dev-qa-db-fra.com

Android - Comment utiliser SharedPreferences en classe non-Activity?

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().

35
Jake Wilson

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);
45
Sandor

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.

43
Santi

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.

2
Dan S

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();
}
}
1
Atiar Talukdar

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();
    }
0
Mohsinali

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 :)

0
russellhoff

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(...)
0
Zohab Ali

Utilisez ce code pour obtenir la context de l'activité.

if (context != null) {
    SharedPreferences sharedPrefs = context.getSharedPreferences("YOUR.PACKAGE.NAME", MODE_PRIVATE);
}
0
Laura Taylor

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,"");
}

}

0
Code Spy