Символ новой строки \ n неправильно отображается в textView Android - PullRequest
19 голосов
/ 27 августа 2010

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

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

, тогда оно будет правильно отображаться так:

Это в первой строке
Это во второй строке

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

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

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

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

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

Существует ли причина, по которой он не отображает \ nперсонажи правильно?Это должно быть связано со строкой в ​​базе данных.Есть предложения?

Ответы [ 5 ]

34 голосов
/ 15 мая 2011

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

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

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

19 голосов
/ 28 августа 2010

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

.пользователь или неизвестный изменяемый источник при вставке данных в базу данных.Это защитит вас от ошибок и SQL-инъекций .

1 голос
/ 02 июня 2013
"This is on first line"||x'0A'||"This is on second line"

|| объединяет строки, а x'0A' - неэкранированный перевод строки.

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

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

Я обнаружил это, когда у вас возникла та же проблема: http://www.mail -archive.com / sqlite-users @sqlite.org/msg43557.html

1 голос
/ 27 августа 2010

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

0 голосов
/ 06 августа 2012

Текстовая область может быть в многострочном или однострочном режиме. Когда он находится в однострочном режиме, символы новой строки '\ 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...