2010-08-27 204 views
15

我知道,如果你这样做换行字符 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字符?它必须与数据库中的字符串有关。有什么建议么?

+0

时,把它放入数据库中找到您的换行可能被转义。当它恢复时,你必须解除它。 – Falmarri 2010-08-27 17:43:47

+1

我该怎么做呢? \ n确实在文本视图中显示,所以我不认为sqlite会将其剥离。 – Mike 2010-08-27 19:13:24

回答

16

正如Falmarri在他的评论中所说的那样,当您的字符串被放入数据库时​​,它将被转义。在将其放入TextView之前,您可以尝试通过调用String s = unescape(stringFromDatabase)来避开字符串。

请注意,在将数据插入数据库时​​,请确保您使用的是来自用户的任何类型的数据或未知的可更改源的DatabaseUtils.sqlEscapeString()。这将保护您免受错误和SQL Injection

+0

SQLiteDatabase类本身没有照顾到它? – Andrew 2011-10-27 15:14:38

+0

你的答复已经6年了。你知道现在有没有办法做到这一点?我有Unicode字符从我的数据库来(例如,\ u2265),我相信现在正在落实到数据库时逃脱。 – Brian 2017-03-21 14:22:56

1

尝试\\n而不是\n。如果它抛出一个异常,而不是使用newline关键字来代替\ n ....换行符是一个字符,ascii 10;它通常以字符串形式输入......并且将用于您的目的.... :)

+0

我假设你打算用白色空间包围\ n。这没有用。我对使用新行关键字的含义有点困惑。没有抛出异常。 – Mike 2010-08-27 19:12:48

+0

我编辑了这篇文章,以说明罗汉的含义。 – MatrixFrog 2010-08-28 02:02:03

32

我发现这个问题Austyn马奥尼的答案是正确的,但这里有一个小的帮助:

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

description是出自你的SQLite数据库

+0

如何在数据库的textview中显示\ t [tab]? – 2013-08-12 15:14:49

+0

伟大的人...工作完美! – 2017-10-16 09:01:25

0

的字符串文本区域可以在多线或单线模式。当它处于单行模式时,换行符'\ n'将被视为空格。有疑问时,可切换多行模式下,你可以使用下面的代码:

setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE); 

我有相同的代码没有对蜂窝和升级Froyo,这似乎有不同的默认值正常运行的问题。当我想强制一个场地单线时,我现在也排除了国旗。

从Android DOC:多行文本可以输入到 领域:API等级增加3

旗地为TYPE_CLASS_TEXT

公共静态最终诠释TYPE_TEXT_FLAG_MULTI_LINE。如果没有设置该标志,文本字段将 限制为单行。恒值:131072(0x00020000)

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

您必须填充字段前设置标志。

+0

我试过30分钟,让我的TextView显示新行和最后什么工作是从我的应用程序中删除上面的代码。我不确定它应该是什么,但是这行代码阻止了我使用“\ n”换行符。 – 2012-10-30 21:25:54

+0

这可能是因为它没有设置标志就可以工作。它也在我的情况下在一些平台上。但设置标志不应该把你的textview变成一行。一定还有其他的错误。 – 2012-10-30 21:45:32

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

||符连接字符串和x'0A'是未转义换行符。

如果要插入记录你必须与"||x'0A'||"更换每一个换行符(如果你的字符串是双引号)。这可能看起来比其他asnswers笨拙。但是,如果你的线是在单独的列,这也适用于一个选择:

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

我发现有你有同样的问题,这一点的同时:http://www.mail-archive.com/[email protected]/msg43557.html

+0

换行符ascii码为10,下面的代码是确定 SELECT FIRSTLINE || X'0A'||二线随时随地; – jasonhao 2013-07-25 03:05:37

+1

在你的答案你有2组进行比较:A0和0A:这是正确的? – jimpanzer 2015-02-23 12:22:28