Nuevo carácter de línea \ n no se muestra correctamente en textView Android

Sé que si haces algo como

myTextView.setText("This is on first line \n This is on second line"); 

Entonces se mostrará correctamente como este:

Esta es la primera línea
Esta es la segunda línea

Cuando almaceno esa cadena en una base de datos y luego la pongo a la vista que aparece como tal:

Esto está en la primera línea \ n Esto está en la segunda línea

Esta es la línea de código que utilizo para extraer la cadena de la base de datos:

 factView.setText(factsCursor.getString(MyDBAdapter.FACT_COLUMN)); 

Simplemente relleno la base de datos de un archivo de texto donde cada línea es una nueva entrada en la tabla así que una línea parecería esto "Esto está en la primera línea \ n Esto está en la segunda línea" y se almacena como texto.

¿Hay alguna razón por la que no se muestran correctamente los \ n caracteres? Debe ser algo que ver con la cadena que está en la base de datos. ¿Alguna sugerencia?

Como Falmarri dijo en su comentario, su cadena se está escapando cuando se pone en la base de datos. Usted podría intentar y unescape la cadena llamando a la String s = unescape(stringFromDatabase) antes de colocarlo en su TextView .

Como advertencia, asegúrese de que está utilizando DatabaseUtils.sqlEscapeString() en cualquier tipo de datos que provengan del usuario o de una fuente cambiable desconocida al insertar datos en la base de datos. Esto le protegerá de errores e Inyección de SQL .

He encontrado esta pregunta Austyn Mahoney respuesta es correcta, pero aquí hay un poco de ayuda:

  private String unescape(String description) { return description.replaceAll("\\\\n", "\\\n"); } 

description es la cadena que sale de su base de datos de SQLite

Intente \\n lugar de \n . Si lanza una excepción que usar una palabra clave newline en lugar de \ n … newline es un carácter, ascii 10; a menudo se introduce en una cadena literal … y servirá a su propósito …. 🙂

 "This is on first line"||x'0A'||"This is on second line" 

El || concatena cadenas y el x'0A' es una nueva línea sin escape.

Si está insertando registros, tendrá que reemplazar cada nueva línea por "||x'0A'||" (Si la cadena es doble). Esto puede parecer torpe comparado con el otro asnswers. Sin embargo, si sus líneas están en columnas separadas esto también funciona en un select:

 SELECT firstline||x'0A'||secondline FROM wherever; 

Encontré esto mientras tenía el mismo problema que usted: http://www.mail-archive.com/sqlite-users@sqlite.org/msg43557.html

Un área de texto puede estar en modo de línea múltiple o de línea única. Cuando está en modo de línea única, los caracteres de nueva línea '\ n' serán tratados como espacios. En caso de duda, para activar el modo multi-línea, puede utilizar el código siguiente:

  setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE); 

Tuve el problema de que el mismo código no funcionaba en nido de abeja y en froyo, que parecen tener diferentes valores por defecto. Ahora también excluyo la bandera cuando quiero forzar un campo para ser solo alineado.

Desde el documento de Android:

public static final int TYPE_TEXT_FLAG_MULTI_LINE Se agrega en el nivel 3 de API

Marca para TYPE_CLASS_TEXT: se pueden introducir varias líneas de texto en el campo. Si este indicador no está establecido, el campo de texto se restringirá a una sola línea. Valor constante: 131072 (0x00020000)

http://developer.android.com/reference/android/text/InputType.html#TYPE_TEXT_FLAG_MULTI_LINE

Debe establecer el indicador antes de rellenar el campo.

  • Cómo agregar la fuente en la aplicación de Android
  • ¿Cómo auto-ajustar el tamaño del texto en un TextView multi-línea de acuerdo con la vista de las dimensiones máximas?
  • Padding arround textview con fondo de nueve parches no tienen efecto visual
  • Desplazamiento horizontal automático de Android TextView
  • Android html.fromhtml + spannablestring
  • Cómo formatear una actividad de otra actividad mediante opciones de menú
  • Cómo manejar el evento "pegar" en Android 3.0 (Honeycomb)?
  • Configuración de Ellipsize en TextView reduce las líneas mostradas por uno (en lugar de sólo elipsis último)
  • El botón de clic no cambia el valor de vista de texto
  • Android (cambio de cadena en código java)
  • Deslizar para desbloquear animación en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.