Символ новой строки \ n не отображается правильно в textView Android

Я знаю, что если вы сделаете что-то вроде

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

Затем он будет отображаться следующим образом:

Это на первой линии
Это вторая строка

Когда я храню эту строку в базе данных и затем устанавливаю ее в представление, она отображается как таковая:

Это на первой строке \ n Это вторая строка

Вот строка кода, которую я использую для извлечения строки из базы данных:

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

Я просто заполняю базу данных из текстового файла, где каждая строка является новой записью в таблицу, поэтому строка будет выглядеть так: «Это на первой строке \ n Это вторая строка», и она сохраняется как текст.

Есть ли причина, что он не отображает символы \ n правильно? Это должно быть связано с тем, что строка находится в базе данных. Какие-либо предложения?

Solutions Collecting From Web of "Символ новой строки \ n не отображается правильно в textView Android"

Как сказал Фальмари в своем комментарии, ваша строка ускользает, когда она помещается в базу данных. Вы можете попробовать и удалить строку, вызвав String s = unescape(stringFromDatabase) прежде чем поместить ее в свой TextView .

В качестве дополнительной заметки убедитесь, что вы используете DatabaseUtils.sqlEscapeString() для любых данных, которые принадлежат пользователю или неизвестному сменному источнику при вставке данных в базу данных. Это защитит вас от ошибок и SQL-инъекций .

Я нашел этот вопрос. Ответ Остин Махони правильный, но вот небольшая помощь:

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

description являющееся строкой, выходящей из вашей базы данных SQLite

Попробуйте \\n вместо \n . Если он выдает исключение, чем использовать ключевое слово newline вместо \ n …. newline – это один символ, ascii 10; Он часто вводится в строковый литерал … и будет служить вашей цели …. 🙂

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

|| x'0A' строки, а x'0A'x'0A' .

Если вы вставляете записи, вам нужно будет заменить каждую новую "||x'0A'||" (Если ваша строка имеет двойную кавычку). Это может показаться неуклюжим по сравнению с другими. Однако, если ваши строки находятся в отдельных столбцах, это также работает при выборе:

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

Я нашел это, имея такую ​​же проблему: http://www.mail-archive.com/sqlite-users@sqlite.org/msg43557.html

Текстовая область может быть в многострочном или однострочном режиме. Когда он находится в режиме одиночной линии, символы новой строки '\ n' будут рассматриваться как пробелы. Если вы сомневаетесь, чтобы переключить многолинейный режим, вы можете использовать следующий код:

  setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE); 

У меня была проблема, что тот же код не работал на сотах и ​​на froyo, которые, похоже, имеют разные значения по умолчанию. Я также исключаю флаг, когда хочу, чтобы поле было однострочным.

Из документа Android:

Public static final int TYPE_TEXT_FLAG_MULTI_LINE Добавлен в уровень API 3

Флаг для TYPE_CLASS_TEXT: в поле можно ввести несколько строк текста. Если этот флаг не установлен, текстовое поле будет ограничено одной строкой. Постоянное значение: 131072 (0x00020000)

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

Перед заполнением поля вы должны установить флаг.