Android – ¿Cómo usar SharedPreferences en la clase non-Activity?
¿Cómo se usan SharedPreferences en una clase que no es de Activity? Intenté hacer una clase genérica de la utilidad de las preferencias e importar android.content.Context
pero Eclipse todavía no me dejó utilizar getSharedPreferences()
.
- Diferencia entre las preferencias compartidas y los proveedores de contenido en android
- Guardar un arraylist de cadenas a las preferencias compartidas
- Guardar matrices de cadenas con SharedPreference
- registerOnSharedPreferenceChangeListener no funciona para los cambios realizados en diferentes procesos
- ¿Es buena idea usar las preferencias compartidas de Android para almacenar grandes cantidades de datos?
- Cómo pasar el contexto de la aplicación dentro Singleton y SharedPreferences Clases
- Cómo guardar la lista <Object> a SharedPreferences?
- Establecer <String> en android sharedpreferences no ahorra al cerrar la fuerza
- Quiero borrar el valor de la preferencia compartida
- SharedPreferences no funciona en todas las actividades
- Android - sharedferences devuelve valor nulo
- ¿Dónde se almacenan las preferencias compartidas?
- OnSavedInstanceState vs. SharedPreferences
SharedPreferences están relacionadas con el contexto. Sólo se puede hacer referencia a él a través de un contexto.
Simplemente puede pasar el contexto como un parámetro a su clase. Por ejemplo en el constructor.
En su actividad:
MyClass myClass = new MyClass(this);
La solución que encontré a esto fue:
1-En una clase MainActivity (es decir, siempre iniciada antes de obtener cualquier contexto en el proyecto), cree una variable estática para el contexto:
public static Context contextOfApplication;
2-En un método importante de esta clase (como onCreate, el constructor, etc) inicializar 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 (también debe ser estático):
public static Context getContextOfApplication(){ return contextOfApplication; }
4-En la clase non-activity obtenga el contexto llamando al método creado estaticamente:
Context applicationContext = MyActivityClass.getContextOfApplication()
;
5-Utilice la clase PreferenceManager para obtener la variable SharedPreferences:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
Espero eso ayude.
Intente usar las preferencias predeterminadas 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 de PATH o el tamaño de la consola). Cada actividad y servicio tiene su propio contexto también, por ejemplo, orientación de la 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 context.getApplicationContext () Es útil. Este es el mismo en toda la aplicación y siempre le dará las mismas preferencias predeterminadas.
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, cuando usar SharedPreferences:
ctx.getSharedPreferences("com.joninazio.euskofest.UsingPreferences_preferences", Context.MODE_PRIVATE)
Esa manera trabaja para mí por lo menos 🙂
Utilice este código a una 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(); } }
- No se pudo resolver: `com.google.android.gms: play-services-appindexing: 10.0.0`
- Mostrar diálogo de la rueda giratoria mientras carga datos en Android