teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

問題を発見

2016/01/27 12:37

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -1,3 +1,55 @@
1
1
  全部右に入るということは、条件分岐`if (language.equals("en") ) `がすべてfalseになっているということになります。デバッグでlanguageに入っている文字が何なのか一度確認してみてはいかがでしょうか。
2
2
 
3
- また、希望の出力にするには比較対象は"en"ではなく"jp"では?
3
+ また、希望の出力にするには比較対象は"en"ではなく"jp"では?
4
+
5
+ ---
6
+
7
+ 原因がわかりました。
8
+ trueの場合もfalseの場合も情報はすべてbuilderに、改行をbuilderleftに入れています。
9
+ つまり、分けているつもりが分けられていません。
10
+ StringBuilderがwhileの外にあるため、ループするたびにデータまたは改行が付け足され、
11
+ 付け足された状態のStringBuilderでTextViewが上書きされます。
12
+ 最終的に、最後の行のlanguageによる分岐の結果のみによって、データが入るTextViewが決定されています。
13
+ これを解消するためには、データを入れるbuilderを変える必要があります。
14
+ また、setTextは最後の1回で十分です。
15
+ ```java
16
+ private void showRETURN(Cursor cursor) {
17
+
18
+ // テキストデータを組み立てるためにStringBuilderをセット
19
+ //DesplayRERURNTRANCEJPに表示する文字列ビルダーのAと、
20
+ //DesplayRERURNTRANCEOTHERに表示する文字列ビルダーのB
21
+ StringBuilder builderA = new StringBuilder("\n");
22
+ StringBuilder builderB = new StringBuilder("\n");
23
+
24
+ while (cursor.moveToNext()) {
25
+
26
+ String language = cursor.getString(2);
27
+ String translate = cursor.getString(1);
28
+ String time = cursor.getString(3);
29
+
30
+ //sqliteデータのlanguageでenが一致したらbuilderAにデータを追加
31
+ //builderBには改行のみ追加
32
+
33
+ if (language.equals("jp")) {
34
+ builderA.append(translate).append(" ");
35
+ builderA.append(time).append("\n");
36
+ builderB.append("\n");
37
+ }
38
+
39
+ //sqliteデータのlanguageが一致しなかったら、builderBにデータを追加
40
+ //builderAには改行のみ 追加
41
+ else{
42
+ builderB.append(translate).append(" ");
43
+ builderB.append(time).append("\n");
44
+ builderA.append("\n");
45
+ }
46
+
47
+ }
48
+ //whileループを抜けてから、結果をTextViewにセット
49
+ DesplayRERURNTRANCEJP.setText(builderA);
50
+ DesplayRERURNTRANCEOTHER.setText(builderB);
51
+
52
+ }
53
+
54
+
55
+ ```