SharedPreferences problemas con la cadena "ISO-8859-1"?
Estoy tratando de escribir un pequeño bit de datos binarios como una cadena de SharedPreferences. Puedo ser muy malentendido la codificación aquí, pero esto es lo que estoy tratando de hacer:
String str = new String("hi there!".getBytes(), "ISO-8859-1"); SharedPreferences p = context.getSharedPreferences("foo", MODE_PRIVATE); Editor e = p.edit(); e.putString("string", str); e.putBoolean("worked", true); e.commit(); ... later on after an app restart... // the shared prefs file will be empty upon the next app start: SharedPreferences p = context.getSharedPreferences("foo", MODE_PRIVATE); Log.d(TAG, "String value present?: " + p.getString("string", null)); Log.d(TAG, "Boolean flag present?: " + p.getBoolean("worked", false));
La llamada commit () devuelve true, todo parece bien. La próxima vez que inicie esta aplicación de demostración, leeré el contenido de esta instancia compartida de prefs, y estará completamente vacía. Si no utilizo la codificación "ISO-8859-1", entonces todo funciona como se esperaba, el archivo prefs compartido tiene los valores clave en él.
- Cómo guardar un mapa hash en Preferencias compartidas
- Cómo almacenar objeto de clase en android sharedPreference?
- SharedPreferences.getBoolean devuelve verdadero cada vez
- Preferencias compartidas entre dos procesos de la misma aplicación
- Convertir ArrayList con Gson a String
¿Pueden los prefs compartidos no funcionar con una cadena usando esa codificación?
Gracias
- SharedPreferences no se actualiza
- Cómo iterar a través de todos los objetos Bundle
- cómo guardar togglebutton estado utilizando preferencias compartidas
- Agregar preferencias dinámicas de la casilla de verificación en Android y mostrarlas en la pantalla de preferencias?
- Cómo almacenar un valor booleano con SharedPreferences en Android?
- Java.lang.IllegalStateException: Orca SharedPreferences utilizado antes de inicializado
- Cuando una aplicación se mueve forzadamente a SD-Card, ¿dónde van SharedPreferences?
- Cómo cambiar mediante programación la imagen de fondo de una actividad de Android
SharedPreferences probablemente está tratando las cadenas como UTF-8 codificadas, y le están dando cadenas que están codificadas ISO-8859-1. Estas dos codificaciones no son compatibles por lo que es probablemente por qué estás viendo este problema.
¿Tiene que usar la codificación ISO-8859-1? ¿Puede usted fijar la codificación a UTF-8 o dejarlo en blanco enteramente (creo que Java lo almacenará como bytes UTF-16 codificados por defecto)? Esto es generalmente una opción más segura para usar cuando se puede.
En la primera línea getBytes () se llama sin especificar una codificación de caracteres por lo que está convirtiendo a UTF8 bytes. Funciona porque estás usando caracteres latinos-1, pero si estuvieras usando cyrillic o griego se bloquearía. ¿Cuál es el punto en esto de todos modos? Las cadenas se almacenan como UTF16 en memoria
- Unión externa izquierda con cláusula Select en Android
- Cómo actualizar el diseño del widget en habilitar?