2011-09-20 8 views

risposta

38

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); 
+8

Aha! Era esattamente quello che stavo cercando. Grazie per la risposta semplice e chiara. Ora posso accedervi usando 'context.getSharedPreferences();'. –

+0

errore era MODE_PRIVATE non può essere risolto a una variabile – Prasad

+1

La mia attività non consente un 'this' nel mio altro costruttore di classe (la classe con' SharedPreferences'). – Azurespot

2

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.

+0

Puoi approfondire? Ho provato 'SharedPreferences prefs = getDefaultSharedPreferences (this);' ma non funziona. –

+0

Ho ampliato la mia risposta. –

+0

Usa 'PreferenceManager.getDefaultSharedPreferences (applicationContext);' non importa dove ti trovi nel codice richiede un contesto per usare le Preferenze. –

39

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.

+4

Questa è una soluzione alternativa utile, suggerirei di utilizzare contextOfApplication come campo privato – FredMaggiowski

+0

Puoi anche utilizzare applicationContext.getSharedPreferences (pref_name, MODE_PRIVATE); –

0

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

1

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

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(); 
    } 
Problemi correlati