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.

¿Pueden los prefs compartidos no funcionar con una cadena usando esa codificación?

Gracias

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

  • Ciclo de vida de Android SharedPreference
  • Un botón con el comentario que ya ha hecho clic no se mostrará la próxima vez que el usuario abra la aplicación
  • Guardar un arraylist de cadenas a las preferencias compartidas
  • No se puede cambiar el texto mediante SharedPreferences
  • ListView y SharedPreferences de opción múltiple
  • Eliminación de preferencias compartidas
  • ¿Cómo utilizo las preferencias compartidas en un fragmento de Android?
  • ¿Qué pasará con SharedPreferences al actualizar una aplicación de Android?
  • Hacer que una actividad aparezca sólo una vez, cuando se inicia la aplicación
  • Android: Obtener todas las entradas seleccionadas de MultiSelectListPreference (SharedPreferences)
  • ¿Contexto de la aplicación para SharedPreferences?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.