2011-09-20 33 views

Respuesta

38

SharedPreferences están relacionadas con el contexto. Solo puede hacer referencia a él a través de un contexto.

Simplemente puede pasar el contexto como parámetro a su clase. Por ejemplo, en el constructor.

En su actividad de hacer:

MyClass myClass = new MyClass(this); 
+8

¡Ajá! Eso era exactamente lo que estaba buscando. Gracias por la respuesta simple y clara. Ahora puedo acceder usando 'context.getSharedPreferences();'. –

+0

error fue MODE_PRIVATE no se puede resolver con una variable – Prasad

+1

Mi actividad no permite un 'this' en mi otro constructor de clase (la clase con' SharedPreferences'). – Azurespot

2

Intente con default preferences con un contexto de aplicación. Un contexto es similar al entorno en el que se ejecuta una aplicación en Linux o Windows (por ejemplo, variables de entorno como el estilo de ventana PATH o el tamaño de la consola). Cada actividad y servicio tiene su propio contexto, por ejemplo, orientación de pantalla, tema y etiqueta, etc. pero para su aplicación no desea el contexto de la actividad, desea algo global para la aplicación, aquí es donde es útil context.getApplicationContext() . Esto es igual en toda la aplicación y siempre le dará las mismas preferencias predeterminadas.

+0

puedes contar? Intenté 'SharedPreferences prefs = getDefaultSharedPreferences (this);' pero no funciona. –

+0

He ampliado mi respuesta. –

+0

Use 'PreferenceManager.getDefaultSharedPreferences (applicationContext);' no importa dónde se encuentre en el código, requiere un contexto para usar las Preferencias. –

39

La solución que encontré a esto fue:

1-En una clase MainActivity (es decir, siempre se puso en marcha antes de recibir cualquier contexto en el proyecto) crear una variable estática para el contexto:

public static Context contextOfApplication;

2-en un método Importante de esta clase (Tales como onCreate, el constructor, etc) Initi alize esta variable utilizando el método getApplicationContext:

public void onCreate() { 
    contextOfApplication = getApplicationContext(); 
} 

3-En la misma clase crear un método "getter" para esta variable (que también debe ser estática):

public static Context getContextOfApplication(){ 
    return contextOfApplication; 
} 

4-en la no -activity class obtener el contexto llamando al método creado estáticamente:

Context applicationContext = MyActivityClass.getContextOfApplication();

5-Uso de la Clase PreferenceManager para obtener la variable SharedPreferences:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext); 

espero que ayude.

+4

Esa es una solución útil, sugeriría utilizar contextOfApplication como un campo privado – FredMaggiowski

+0

También puede usar applicationContext.getSharedPreferences (pref_name, MODE_PRIVATE); –

0

Primero, declare un atributo privado en su clase. En mi caso, tengo una clase BaseAdapter:

private final Context ctx; 
private final Vector<Acto> actos; 

public ActoAdaptador(Context ctx, Vector<Acto> as) { 
    super(); 
    this.ctx = ctx; 
    this.actos = as; 
} 

Entonces, cuándo usar los SharedPreferences:

ctx.getSharedPreferences("com.joninazio.euskofest.UsingPreferences_preferences", Context.MODE_PRIVATE) 

De esta manera funciona para mí al menos :)

1

uso de este código a un Nueva clase.

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

crear SharedPreferences clase

/** 
    * @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(); 
    } 
Cuestiones relacionadas