studio - ¿Cómo obtengo las SharedPreferences de una actividad de preferencia en Android?
sharedpreferences android studio ejemplo (5)
Declara 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);
}
Entonces llama esto cuando quieras poner un pref:
putPref("myKey", "mystring", getApplicationContext());
llama a esto cuando quieras obtener una pref.
getPref("myKey", getApplicationContext());
O puede usar este objeto https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo que simplifica todo 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);
Estoy usando PreferenceActivity para mostrar algunas configuraciones para mi aplicación. Estoy inflando la configuración a través de un archivo xml para que mi onCreate (y los métodos de clase completos) se vea así:
public class FooActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.preference);
}
}
El javadoc de PreferenceActivity PreferenceFragment establece que
Estas preferencias se guardarán automáticamente en SharedPreferences a medida que el usuario interactúe con ellas. Para recuperar una instancia de SharedPreferences que utilizará la jerarquía de preferencias en esta actividad, llame a getDefaultSharedPreferences (android.content.Context) con un contexto en el mismo paquete que esta actividad.
¿Pero cómo obtengo el nombre de SharedPreference en otra actividad? Solo puedo llamar
getSharedPreferences(name, mode)
en la otra actividad, pero necesito el nombre de SharedPreference que fue utilizado por PreferenceActivity. ¿Cuál es el nombre o cómo puedo recuperarlo?
Si no tiene acceso a getDefaultSharedPreferenes()
, puede usar getSharedPreferences(name, mode)
lugar, solo tiene que pasar el nombre correcto.
Android crea este nombre (¿posiblemente basado en el nombre del paquete de su proyecto?). Puede obtenerlo colocando el siguiente código en un SettingsActivity
onCreate()
y viendo qué preferencesName
es.
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
La cadena debe ser algo como com.example.projectname_preferences
. Codifique el código duro en algún lugar de su proyecto, y páselo a getSharedPreferences()
y estará listo.
Tener que pasar el contexto por todas partes es realmente molesto para mí. El código se vuelve demasiado detallado e inmanejable. Hago esto en cada proyecto ...
public class global {
public static Activity globalContext = null;
y configurarlo en la actividad principal crear
@Override
public void onCreate(Bundle savedInstanceState) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
global.sdcardPath,
""));
super.onCreate(savedInstanceState);
//Start
//Debug.startMethodTracing("appname.Trace1");
global.globalContext = this;
Además, todas las claves de preferencia deben ser independientes del idioma, me sorprende que nadie haya mencionado eso.
getText(R.string.yourPrefKeyName).toString()
Ahora llámalo muy simplemente así en una línea de código
global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);
si tiene una casilla de verificación y desea obtener su valor, es decir, verdadero / falso en cualquier archivo java--
Utilizar--
Context mContext;
boolean checkFlag;
checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);
Actualizar
De acuerdo a las preferencias compartidas | Tutorial para desarrolladores de Android (Parte 13) por Sai Geetha MN,
Muchas aplicaciones pueden proporcionar una forma de capturar las preferencias del usuario en la configuración de una aplicación específica o una actividad. Para apoyar esto, Android proporciona un conjunto simple de API.
Las preferencias son típicamente pares de valores de nombre. Se pueden almacenar como "Preferencias compartidas" a través de varias actividades en una aplicación (tenga en cuenta que actualmente no se puede compartir entre procesos). O puede ser algo que necesita ser almacenado específicamente para una actividad.
Preferencias compartidas: las preferencias compartidas pueden ser utilizadas por todos los componentes (actividades, servicios, etc.) de las aplicaciones.
Preferencias de la actividad manejada: estas preferencias solo pueden usarse dentro de la actividad particular y no pueden ser utilizadas por otros componentes de la aplicación.
Preferencias compartidas:
Las preferencias compartidas se administran con la ayuda del método getSharedPreferences
de la clase Context
. Las preferencias se almacenan en un archivo predeterminado (1) o puede especificar un nombre de archivo (2) que se usará para referirse a las preferencias.
(1) La forma recomendada es utilizar el modo predeterminado, sin especificar el nombre del archivo.
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
(2) Aquí es cómo obtiene la instancia cuando 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 operación para las preferencias. Es el modo predeterminado y significa que solo la aplicación que llama tendrá acceso al archivo creado. Otros dos modos compatibles 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 el caso de MODE_WORLD_WRITEABLE
otras aplicaciones también tienen permisos de escritura para el archivo creado.
Finalmente, una vez que tenga la instancia de preferencias, aquí es cómo puede recuperar los valores almacenados de las preferencias:
int storedPreference = preferences.getInt("storedInt", 0);
Para almacenar valores en el archivo de preferencias SharedPreference.Editor
debe utilizarse el objeto. 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 admite métodos como remove()
y clear()
para eliminar los valores de preferencia del archivo.
Preferencias de actividad:
Las preferencias compartidas pueden ser utilizadas por otros componentes de la aplicación. Pero si no necesita compartir las preferencias con otros componentes y desea tener preferencias privadas de actividad, puede hacerlo con la ayuda del método getPreferences()
de la actividad. El método getPreference
utiliza el método getSharedPreferences()
con el nombre de la clase de actividad para el nombre del archivo de preferencias.
A continuación se muestra el código para obtener las preferencias.
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
El código para almacenar valores también es 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 almacenar el estado de la actividad en la base de datos. Tenga en cuenta que Android también contiene un paquete llamado android.preference
. El paquete define clases para implementar la interfaz de usuario de preferencias de la aplicación
Para ver algunos ejemplos más, consulte la publicación de almacenamiento de datos de Android en el sitio de los desarrolladores.