2010-08-27 209 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