2012-02-08 7 views
9

He estado atascado en este problema muy simple durante horas y no he podido encontrar ninguna solución adecuada a través de Google.¿Cómo uso las SharedPreferences fuera de una actividad?

Estoy tratando de usar la clase SharedPreferences en la capa de modelo de mi aplicación. Específicamente, quiero poder guardar o buscar el nombre de usuario y el token correspondiente siempre que se inicie la aplicación (si el usuario configura la aplicación para el inicio de sesión automático).

¿Hay alguna manera de usar las SharedPreferences para este problema o me veo forzado a usar FileInput/Output?

Respuesta

26

¿Dónde se instancia la clase del modelo?

Sólo tiene que pasar ya sea un contexto o los SharedPreferences al constructor:

public class Model { 
    private final Context context; 
    private final SharedPreferences sharedPrefs; 

    public Model(Context context) { 
     this.context = context; 
     sharedPrefs = context.getSharedPreferences("name", 0); 
    } 

    private String doSomething(){ 
     return sharedPrefs.getString("key", "defValue"); 
    } 
} 
+0

De acuerdo. ¿Pero eso no plantea un problema si quiero acceder a estos datos desde más de una actividad? – CodePrimate

+0

Si accedió a los datos de más de una actividad, ¿usaría un nuevo constructor al que se refiere? Si desea las mismas Preferencias Compartidas entre actividades, solo depende del 'nombre'. – Blundell

+0

Gracias. Esto terminó siendo la clave para resolver mi problema. – CodePrimate

4

SharedPreferences no se llama sólo de Activity, pero a partir de Context (que se extiende Activity) para que pueda utilizar el contexto de aplicación también.

+0

También developerd biblioteca de inyección pequeño, lo que permite un uso más fácil fo preferencias: https://github.com/ko5tik/andject que sólo puede Inyectar/expulsar preferencias en propiedades de frijol. –

0

Puede usar Preferencias Compartidas desde cualquier código que contenga un Contexto. A partir de la documentación de la actividad en http://developer.android.com/reference/android/app/Activity.html:

Actividad persistente estado se maneja con los getPreferences método (int), lo que le para recuperar y modificar un conjunto de pares de nombre/valor asociados a la actividad. Para usar las preferencias que se comparten en varios componentes de la aplicación (actividades, receptores , servicios, proveedores), puede utilizar el método subyacente Context.getSharedPreferences() para recuperar un objeto de preferencias almacenado con un nombre específico. (Tenga en cuenta que no es posible compartir datos de configuración a través de paquetes de aplicaciones -. Para que se le necesitar un proveedor de contenidos)

Cuestiones relacionadas