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

30
demandé sur Jake Wilson 2011-09-21 00:18:51

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);
41
répondu Sandor 2016-09-08 12:43:58

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.

42
répondu Santi 2015-07-09 10:54:33

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.

2
répondu Dan S 2011-09-20 20:53:28

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
répondu Atiar Talukdar 2017-06-06 17:42:36

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

0
répondu russellhoff 2013-09-02 17:08:36

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();
    }
0
répondu Mohsinali 2018-03-07 13:09:52

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

}

0
répondu Code Spy 2018-05-03 11:00:31

utilisez ce code pour obtenir le context de l'activité.

if (context != null) {
    SharedPreferences sharedPrefs = context.getSharedPreferences("YOUR.PACKAGE.NAME", MODE_PRIVATE);
}
0
répondu Laura Taylor 2018-09-01 18:41:00

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(...)
0
répondu Zohab Ali 2018-09-21 07:13:27