アセットフォルダにあるSQLファイルをSQL文を使ってTextViewに表示させるアプリを作成しています。
INSERT文章内に(バックスラッシュ)\nが入っている箇所で改行させたいのですが、エミュレータや実機のテストでTextViewに表示させるとなぜか改行されずにそのまま(バックスラッシュ)\nが表示されてしまいます。
検索で色々調べたのですが「ファイルの中の"\n"はコンパイルで変換されないので一度String.replace()で置換すると良い」と書いてあったサイトがあったので試しにString.replace(desc)で置換しようと思ったのですがreplaceが古いためか使えません。
どうやると改行されるでしょうか?教えて下さい。
※Windowsパソコンでは¥になっていますがmacなので実際のコード記述はバックスラッシュです。
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView myTextView = (TextView)findViewById(R.id.myText);
final DatabaseOpenHelper openHelper = new DatabaseOpenHelper(this);
final SQLiteDatabase database = openHelper.getWritableDatabase();
//処理
Cursor cursor = null;
cursor = database.query(
WordContract.Words.TABLE_NAME,
null,
null,
null,
null,
null,
null
);
Log.v("UAA", "Count:" + cursor.getCount());
while (cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex(WordContract.Words.COL_WORD));
String desc = cursor.getString(cursor.getColumnIndex(WordContract.Words.COL_DESCR));
myTextView.setText(desc);
}
cursor.close();
database.close();
// Cursor cursor = null;
}
}
DatabaseOpenHelper.java
public class DatabaseOpenHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "open.db"; //データベース名
private static final int DB_VERSION = 2; //データベースのバージョン
private final Context mContext; //コンテキスト
public static final String CREATE_TABLE =
"create table " + WordContract.Words.TABLE_NAME + " (" +
WordContract.Words._ID + " integer primary key, " +
WordContract.Words.COL_WORD + " text," +
WordContract.Words.COL_DESCR + " text)";
public static final String DROP_TABLE =
"drop table if exists " + WordContract.Words.TABLE_NAME;
//コンストラクタ
public DatabaseOpenHelper(Context context){
super(context, DB_NAME, null, DB_VERSION);
this.mContext = context;
}
//データベースが作成された時に呼ばれる
//assets/sql内に定義されているsqlを実行します
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE);
Log.d("UAA:cr", CREATE_TABLE);
execSql(db,"sql");
}catch (IOException e){
e.printStackTrace();
}
}
//データベースをバージョンアップした時に呼ばれます。
//assets/sql/drop内に定義されているsqlを実行します。
//その後onCreate()メソッドを呼び出します。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DROP_TABLE);
Log.v("UAA:dr", DROP_TABLE);
onCreate(db);
}
//引数に指定したassetsフォルダ内のsqlを実行する
private void execSql(SQLiteDatabase db, String assetsDir) throws IOException {
AssetManager as = mContext.getResources().getAssets();
try{
String files[] = as.list(assetsDir);
for (int i = 0; i < files.length; i++){
String str = readFile(as.open(assetsDir + "/" + files[i]));
for (String sql: str.split("/")){
db.execSQL(sql);
Log.d("UAA:sql", String.valueOf(sql));
}
}
}catch (IOException e){
e.printStackTrace();
}
}
//ファイルから文字列を読み込む
private String readFile(InputStream is) throws IOException{
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
StringBuilder sb = new StringBuilder();
String str;
while ((str = br.readLine()) != null){
sb.append(str + "/");
}
return sb.toString();
}finally {
if (br != null)br.close();
}
}
}
DatabaseOpenHelper.java
public final class WordContract {
public WordContract(){}
public static abstract class Words implements BaseColumns{
public static final String TABLE_NAME = "word";
public static final String COL_WORD = "word";
public static final String COL_DESCR = "original_description";
` INSERT文(assetsフォルダ内にsqlファイルとして設置)
INSERT INTO word (word,original_description) VALUES (‘アイコン',,'パソコン操作画面のデータファイルや処理を小さな画像でわかりやすく表現した絵や記号のこと。一般に16×16ピクセルから128×128ピクセルほどの大きさの画像で表示されます。\n\nOSやアプリケーション上でファイルの内容や操作方法が直観的に理解できるようにデザイン的に象徴化したもの。');
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
0
String.format(A行 %n B行)で解決しました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
Macだと円マークを入力しても円マークのままでバックスラッシュにならないので、optionキーを押しながら\を入力してください。
(コンソールなど一部環境では、Macでも円マークを入力するとバックスラッシュになります。)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる