¿Cómo consigo los SharedPreferences de un PreferenceActivity en Android?
-
26-09-2019 - |
Pregunta
Estoy utilizando un PreferenceActivity para mostrar algunos ajustes para mi aplicación. Estoy inflando los ajustes a través de un archivo XML para que mi onCreate (y métodos de clase completas) es similar al siguiente:
public class FooActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.preference);
}
}
El javadoc de PreferenceActivity PreferenceFragment estados que
Estas preferencias se guardará automáticamente a SharedPreferences como el usuario interactúa con ellos. Para recuperar una instancia de SharedPreferences que la jerarquía de preferencia en esta actividad va a utilizar, getDefaultSharedPreferences de llamada (android.content.Context) con un contexto en el mismo paquete que esta actividad.
Pero, ¿cómo puedo obtener el nombre del SharedPreference en otra actividad? Sólo puedo llamar
getSharedPreferences(name, mode)
en la otra actividad, pero necesito el nombre de la SharedPreference que fue utilizado por el PreferenceActivity. ¿Cuál es el nombre o cómo puedo recuperarlo?
Solución
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);
Actualizar
De acuerdo con Compartidos | Desarrollador Android Tutorial (parte 13) por Sai Gita M N,
Muchas aplicaciones puede proporcionar una manera de preferencias de captura de usuario en el la configuración de una aplicación específica o una actividad. para apoyar esto, Android proporciona un simple conjunto de APIs.
Preferencias son típicamente nombrar pares de valores. Ellos se pueden almacenar como “Preferencias” compartidas a través de varias actividades en una aplicación (nota Actualmente no se puede compartir entre procesos). O puede ser algo que necesita ser almacenado a una actividad específica.
-
Preferencias compartidas:. Las preferencias compartidas pueden ser utilizadas por todos los componentes (actividades, servicios, etc) de las aplicaciones
-
preferencias Actividad manejado:. Estas preferencias sólo se pueden utilizar dentro de la actividad particular y no pueden ser utilizados por otros componentes de la aplicación
Preferencias compartidas:
Las preferencias compartidas son gestionados con la ayuda del método de la clase getSharedPreferences
Context
. Las preferencias se almacenan en un archivo por defecto (1) o puede especificar un nombre de archivo (2) que se utilizará para referirse a las preferencias.
(1) La forma recomendada es utilizar el modo por defecto, sin especificar el nombre de archivo
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
(2) Así es como se obtiene la instancia cuando se especifica el nombre del archivo
public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
MODE_PRIVATE
es el modo de funcionamiento de las preferencias. Es el modo por defecto y significa que el archivo creado se accede sólo por la aplicación de llamada. Otros dos modos soportados son MODE_WORLD_READABLE
y MODE_WORLD_WRITEABLE
. En MODE_WORLD_READABLE
otra aplicación puede leer el archivo creado, pero no puede modificarlo. En caso de MODE_WORLD_WRITEABLE
otras aplicaciones también tienen permisos de escritura para el archivo creado.
Por último, una vez que tenga la instancia preferencias, aquí es cómo puede recuperar los valores almacenados de las preferencias:
int storedPreference = preferences.getInt("storedInt", 0);
Para los valores tienda en el objeto SharedPreference.Editor
archivo de preferencias tiene que ser utilizado. Editor
es una interfaz anidada en la clase SharedPreference
.
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
Editor también es compatible con métodos como remove()
y clear()
suprimir los valores de preferencia del archivo.
Preferencias Actividad:
Las preferencias compartidas puede ser utilizado por otros componentes de la aplicación. Pero si no es necesario compartir las preferencias con otros componentes y quieren tener preferencias particulares de actividad que puede hacer que con la ayuda del método de getPreferences()
de la actividad. El método utiliza el método getPreference
getSharedPreferences()
con el nombre de la clase de actividad para el nombre de archivo de preferencias.
A continuación se muestra el código para obtener preferencias
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
El código para almacenar valores es también el mismo que en el caso de las preferencias compartidas.
SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
También puede utilizar otros métodos, como el almacenamiento del estado de actividad en la base de datos. Nota Android también contiene un paquete llamado android.preference
. Las clases define los paquetes para implementar preferencias de la aplicación de interfaz de usuario.
Para ver algunos ejemplos más cheque de Android almacenamiento de datos mensaje el sitio de desarrolladores.
Otros consejos
Si usted no tiene acceso a getDefaultSharedPreferenes()
, puede utilizar getSharedPreferences(name, mode)
en cambio, sólo hay que pasar el nombre correcto.
Android crea este nombre (posiblemente basado en el nombre del paquete de su proyecto?). Se puede conseguir poniendo el siguiente código en un SettingsActivity
onCreate()
, y ver lo que es preferencesName
.
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
La cadena debe ser algo como com.example.projectname_preferences
. código duro que en algún lugar de su proyecto, y pasarlo a getSharedPreferences()
y usted debe ser bueno para ir.
Declarar estos métodos primero ..
public static void putPref(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getPref(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
A continuación, llamar a esto cuando se quiere poner un pref:
putPref("myKey", "mystring", getApplicationContext());
llamar a esto cuando se desea obtener una pref:
getPref("myKey", getApplicationContext());
o usted puede utilizar este objeto https: //github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo todo lo que simplifica aún más
Ejemplo:
TinyDB tinydb = new TinyDB(context);
tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);
tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true);
tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);
tener que pasar por todas partes contexto es realmente me molesta. el código se vuelve demasiado prolijo y difícil de manejar. Lo hago en cada proyecto en lugar ...
public class global {
public static Activity globalContext = null;
y la puso en la actividad principal de crear
@Override
public void onCreate(Bundle savedInstanceState) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
global.sdcardPath,
""));
super.onCreate(savedInstanceState);
//Start
//Debug.startMethodTracing("appname.Trace1");
global.globalContext = this;
nadie también todas las claves de preferencia debe ser independiente del lenguaje, me ha impactado ha mencionado.
getText(R.string.yourPrefKeyName).toString()
Ahora llamar de manera muy simple como esto en una línea de código
global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);
Si usted tiene una casilla de verificación y que le gustaría a buscar a su valor es decir, verdadero / falso en cualquier archivo Java -
Uso -
Context mContext;
boolean checkFlag;
checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`
Actualización 2019
Usted simplemente puede usar la biblioteca PowerPreference
https://github.com/AliEsaAssadi/Android-Power-Preference
Cómo instancia preferencia compartida
Para obtener la instancia predeterminada sólo tiene que llamar
PowerPreference.getDefaultFile()
O si desea un archivo específico preferencia
PowerPreference.getFileByName(fileName)
escritura de datos:
PowerPreference.getDefaultFile().put(key,value)
Obtención de datos
PowerPreference.getDefaultFile().getString(key,value)