回答編集履歴

1

問題を発見

2016/01/27 12:37

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -3,3 +3,107 @@
3
3
 
4
4
 
5
5
  また、希望の出力にするには比較対象は"en"ではなく"jp"では?
6
+
7
+
8
+
9
+ ---
10
+
11
+
12
+
13
+ 原因がわかりました。
14
+
15
+ trueの場合もfalseの場合も情報はすべてbuilderに、改行をbuilderleftに入れています。
16
+
17
+ つまり、分けているつもりが分けられていません。
18
+
19
+ StringBuilderがwhileの外にあるため、ループするたびにデータまたは改行が付け足され、
20
+
21
+ 付け足された状態のStringBuilderでTextViewが上書きされます。
22
+
23
+ 最終的に、最後の行のlanguageによる分岐の結果のみによって、データが入るTextViewが決定されています。
24
+
25
+ これを解消するためには、データを入れるbuilderを変える必要があります。
26
+
27
+ また、setTextは最後の1回で十分です。
28
+
29
+ ```java
30
+
31
+ private void showRETURN(Cursor cursor) {
32
+
33
+
34
+
35
+ // テキストデータを組み立てるためにStringBuilderをセット
36
+
37
+ //DesplayRERURNTRANCEJPに表示する文字列ビルダーのAと、
38
+
39
+ //DesplayRERURNTRANCEOTHERに表示する文字列ビルダーのB
40
+
41
+ StringBuilder builderA = new StringBuilder("\n");
42
+
43
+ StringBuilder builderB = new StringBuilder("\n");
44
+
45
+
46
+
47
+ while (cursor.moveToNext()) {
48
+
49
+
50
+
51
+ String language = cursor.getString(2);
52
+
53
+ String translate = cursor.getString(1);
54
+
55
+ String time = cursor.getString(3);
56
+
57
+
58
+
59
+ //sqliteデータのlanguageでenが一致したらbuilderAにデータを追加
60
+
61
+ //builderBには改行のみ追加
62
+
63
+
64
+
65
+ if (language.equals("jp")) {
66
+
67
+ builderA.append(translate).append(" ");
68
+
69
+ builderA.append(time).append("\n");
70
+
71
+ builderB.append("\n");
72
+
73
+ }
74
+
75
+
76
+
77
+ //sqliteデータのlanguageが一致しなかったら、builderBにデータを追加
78
+
79
+ //builderAには改行のみ 追加
80
+
81
+ else{
82
+
83
+ builderB.append(translate).append(" ");
84
+
85
+ builderB.append(time).append("\n");
86
+
87
+ builderA.append("\n");
88
+
89
+ }
90
+
91
+
92
+
93
+ }
94
+
95
+ //whileループを抜けてから、結果をTextViewにセット
96
+
97
+ DesplayRERURNTRANCEJP.setText(builderA);
98
+
99
+ DesplayRERURNTRANCEOTHER.setText(builderB);
100
+
101
+
102
+
103
+ }
104
+
105
+
106
+
107
+
108
+
109
+ ```