preferencia - sharedpreferences android studio ejemplo
¿Cómo puedo ver el archivo de preferencias compartidas con Android Studio? (9)
Archivos de preferencia compartidos simples o múltiples
Si tiene varios archivos de Shared Preference
, esta es una buena manera de mostrarlos, pero también puede pasar 1 nombre de archivo.
loadSharedPrefs("pref_name");
loadSharedPrefs("shared_pref1", "shared_pref2", "shared_pref3");
Elija una de las siguientes opciones para satisfacer sus necesidades ...
Valores de un solo tipo
public void loadSharedPrefs(String ... prefs) {
// Logging messages left in to view Shared Preferences. I filter out all logs except for ERROR; hence why I am printing error messages.
Log.i("Loading Shared Prefs", "-----------------------------------");
Log.i("----------------", "---------------------------------------");
for (String pref_name: prefs) {
SharedPreferences preference = getSharedPreferences(pref_name, MODE_PRIVATE);
for (String key : preference.getAll().keySet()) {
Log.i(String.format("Shared Preference : %s - %s", pref_name, key),
preference.getString(key, "error!"));
}
Log.i("----------------", "---------------------------------------");
}
Log.i("Finished Shared Prefs", "----------------------------------");
}
Valores de tipo múltiple
public void loadSharedPrefs(String ... prefs) {
// Define default return values. These should not display, but are needed
final String STRING_ERROR = "error!";
final Integer INT_ERROR = -1;
// ...
final Set<String> SET_ERROR = new HashSet<>(1);
// Add an item to the set
SET_ERROR.add("Set Error!");
// Loop through the Shared Prefs
Log.i("Loading Shared Prefs", "-----------------------------------");
Log.i("------------------", "-------------------------------------");
for (String pref_name: prefs) {
SharedPreferences preference = getSharedPreferences(pref_name, MODE_PRIVATE);
Map<String, ?> prefMap = preference.getAll();
Object prefObj;
Object prefValue = null;
for (String key : prefMap.keySet()) {
prefObj = prefMap.get(key);
if (prefObj instanceof String) prefValue = preference.getString(key, STRING_ERROR);
if (prefObj instanceof Integer) prefValue = preference.getInt(key, INT_ERROR);
// ...
if (prefObj instanceof Set) prefValue = preference.getStringSet(key, SET_ERROR);
Log.i(String.format("Shared Preference : %s - %s", pref_name, key),
String.valueOf(prefValue));
}
Log.i("------------------", "-------------------------------------");
}
Log.i("Loaded Shared Prefs", "------------------------------------");
}
}
Salida de Logcat
Mis valores de Shared Preference
son todos String
, pero este es el resultado usando cualquiera de los 2 métodos anteriores ...
I/Loading Shared Prefs﹕ -----------------------------------
I/------------------﹕ -------------------------------------
I/Shared Preference : FAVORITE - 135397﹕ Jurassic World
I/Shared Preference : FAVORITE - 87101﹕ Terminator Genisys
I/Shared Preference : FAVORITE - 177677﹕ Mission: Impossible – Rogue Nation
I/------------------﹕ -------------------------------------
I/Shared Preference : WATCHED - 177677﹕ Mission: Impossible – Rogue Nation
I/Shared Preference : WATCHED - 157336﹕ Interstellar
I/Shared Preference : WATCHED - 135397﹕ Jurassic World
I/Shared Preference : WATCHED - 87101﹕ Terminator Genisys
I/------------------﹕ -------------------------------------
I/Shared Preference : WILL_WATCH - 211672﹕ Minions
I/Shared Preference : WILL_WATCH - 102899﹕ Ant-Man
I/------------------﹕ -------------------------------------
I/Loaded Shared Prefs﹕ ------------------------------------
Estoy usando preferencias compartidas para almacenar ciertos valores para mi aplicación. Me gustaría ver el archivo donde la información está realmente almacenada en mi teléfono. Encontré muchas maneras de hacer esto en Eclipse, pero estoy depurando en Android Studio. Mi teléfono está rooteado. Leí que tener acceso a la raíz es importante para leer este tipo de archivos. Si no hay forma, entonces buscaré cómo acceder a la información a través de mi programa y luego la enviaré a log cat. Sin embargo, con suerte, puedo ver el archivo en el teléfono directamente, ya que es mucho más simple. Gracias.
Android Studio -> Device File Explorer (esquina inferior derecha) -> data -> data -> {package.id} -> shared-prefs
Nota: debe conectar el dispositivo móvil a Android Studio y la aplicación seleccionada debe estar en modo de depuración
Desde Android Studio, inicie Android Device Monitor, vaya a File Explorer y busque "/ data / data / <name of your package> / shared_prefs /". Encontrará el XML allí ... y también puede copiarlo para su inspección.
Si tiene un dispositivo no rooteado, no es posible hacerlo directamente desde Android Studio. Sin embargo, puede acceder al archivo con adb shell
siempre que su aplicación sea la versión de depuración.
adb shell
run-as your.app.id
chmod 777 shared_prefs/your.app.id_preferences.xml
exit # return to default user
cp /data/data/your.app.id/shared_prefs/your.app.id_preferences.xml /sdcard
Después de eso, puede extraer el archivo del directorio / sdcard con adb.
Ejecute la aplicación en Emulator después de insertar algunos datos, solo cierre la aplicación.
Ahora abra DDMS o Android Monitor y seleccione su emulador. En el lado derecho, puede ver el Explorador de archivos, buscar la carpeta de datos en él y buscar el paquete de la aplicación que ha creado, en el que puede encontrar el archivo de preferencias compartidas abierto puede ver el archivo XML, hacer clic en él y hacer clic en el botón "extraer un archivo" del dispositivo en la esquina superior derecha.
El archivo XML se guardará en la ubicación que desee, luego puede abrirlo usando cualquier editor como notepad ++ y puede ver los datos que ha ingresado.
Esta es una publicación anterior, pero creo que debería poner una respuesta gráfica aquí, ya que la pregunta es sobre la visualización de SharedPreferences.xml
con Android Studio. Entonces aquí va.
Vaya a Herramientas -> Monitor del dispositivo Android. Abra el monitor del dispositivo haciendo clic en él.
Luego debe seleccionar la pestaña Explorador de archivos en el monitor del dispositivo. Encuentra la carpeta de datos y encuentra otra carpeta de datos dentro de ella. Contendrá una carpeta que tiene el nombre de su paquete de aplicación y tendrá las SharedPreferences.xml
deseadas.
Seleccione el archivo SharedPreferences.xml
y luego arrastre y guarde el archivo en su computadora con el botón marcado en la esquina superior derecha de la imagen de arriba.
He usado un emulador de dispositivo.
Otra forma simple sería usar una aplicación de explorador de raíz en su teléfono.
Luego vaya a /data/data/package name/shared preferences folder/name of your preferences.xml
, puede usar ES File explorer , y vaya a la root
de su dispositivo, no a la sd card
.
Puede usar http://facebook.github.io/stetho/ para acceder a sus preferencias compartidas mientras su aplicación se encuentra en el modo de depuración. Sin raíz
caracteristicas:
- ver y editar las preferencias compartidas
- ver y editar sqLite db
- ver jerarquía de vista
- monitorear las solicitudes de red http
- ver transmisión desde la pantalla del dispositivo
- y más....
Configuración básica:
- en build.gradle add
compile ''com.facebook.stetho:stetho:1.5.0''
- en la aplicación onCreate () agrega
Stetho.initializeWithDefaults(this);
- en Chrome en tu PC ve a Chrome: // inspeccionar /
Siempre encuentro estos comandos útiles en la consola:
Encuentra el nombre correcto del archivo
adb shell
ls /data/data/com.your.package/shared_prefs
Obtener el archivo en el directorio local
adb pull /data/data/com.your.package/shared_prefs/the_file_you_want $local_dir
Verifíquelo en su
$local_dir
.
Simplemente podría crear una Actividad especial para la depuración:
@SuppressWarnings("unchecked")
public void loadPreferences() {
Map<String, ?> prefs = PreferenceManager.getDefaultSharedPreferences(
context).getAll();
for (String key : prefs.keySet()) {
Object pref = prefs.get(key);
String printVal = "";
if (pref instanceof Boolean) {
printVal = key + " : " + (Boolean) pref;
}
if (pref instanceof Float) {
printVal = key + " : " + (Float) pref;
}
if (pref instanceof Integer) {
printVal = key + " : " + (Integer) pref;
}
if (pref instanceof Long) {
printVal = key + " : " + (Long) pref;
}
if (pref instanceof String) {
printVal = key + " : " + (String) pref;
}
if (pref instanceof Set<?>) {
printVal = key + " : " + (Set<String>) pref;
}
// create a TextView with printVal as text and add to layout
}
}