web-dev-qa-db-ja.com

改行文字\ nがtextViewに正しく表示されないAndroid

あなたが次のようなことをしたら

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

その後、次のように正しく表示されます。

これは最初の行です
これは2行目です

その文字列をデータベースに保存し、それを表示するビューに設定すると、次のようになります。

これは最初の行にあります\ nこれは2行目にあります

以下は、データベースから文字列を抽出するために使用するコード行です。

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

各行がテーブルの新しいエントリであるテキストファイルからデータベースにデータを入力するだけなので、行は「これは最初の行にあります\ nこれは2行目にあります」のようになり、テキストとして保存されます。

\ n文字が適切に表示されない理由はありますか?これは、データベース内の文字列と関係があるはずです。助言がありますか?

20
Mike

Falmarriが彼のコメントで述べたように、あなたの文字列はデータベースに入れられるときにエスケープされています。文字列をTextViewに配置する前にString s = unescape(stringFromDatabase)を呼び出すことで、文字列のエスケープを解除できます。

補足として、データベースにデータを挿入するときは、ユーザーからのあらゆる種類のデータまたは不明な変更可能なソースでDatabaseUtils.sqlEscapeString()を使用していることを確認してください。これにより、エラーと SQLインジェクション から保護されます。

19
Austyn Mahoney

私はこの質問を見つけましたオースティン・マホニーの答えは正しいですが、ここに少し助けがあります:

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

descriptionはSQLite DBから出力される文字列です

34
Blundell

\\nではなく\nをお試しください。例外がスローされる場合は、\ nの代わりに改行キーワードを使用します。..改行は1文字で、ASCII 10です。多くの場合、文字列リテラルで入力されます...そしてあなたの目的に役立ちます......)

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

||は文字列を連結し、x'0A'はエスケープされていない改行です。

レコードを挿入する場合は、すべての改行を"||x'0A'||"で置き換える必要があります(文字列が二重引用符で囲まれている場合)。これは、他の回答者に比べて不格好に見えるかもしれません。ただし、行が別々の列にある場合、これは選択でも機能します。

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

あなたが同じ問題を抱えているときにこれを見つけました: http://www.mail-archive.com/[email protected]/msg43557.html

1
Brendan Draper

テキスト領域は複数行または単一行モードにすることができます。単一行モードの場合、改行文字「\ n」はスペースとして扱われます。疑わしい場合は、マルチラインモードを切り替えるには、次のコードを使用できます。

    setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE);

同じコードがハニカムとフローズン(デフォルトが異なるように見える)では機能しないという問題がありました。フィールドを強制的に単一行にしたい場合も、フラグを除外しています。

Android docから:

public static final int TYPE_TEXT_FLAG_MULTI_LINE APIレベル3で追加されました

TYPE_CLASS_TEXTのフラグ:複数行のテキストをフィールドに入力できます。このフラグが設定されていない場合、テキストフィールドは1行に制限されます。定数値:131072(0x00020000)

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

フィールドに入力する前にフラグを設定する必要があります。

0