回答編集履歴

5

追記

2020/10/08 08:18

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -132,4 +132,16 @@
132
132
 
133
133
 
134
134
 
135
- のようになっていました。変数quiz1は配列quizData1から得た文字列を挿入したリストになっていますが、quizData1の定義では4×5の二次元配列になっているのに、それを格納したリストから1つ`remove()`してしまったら3つに減ってしまいますね。さらに、`get()`するときのインデックスは0から始まるので、元々は0〜3のリスト、そこから1つremoveしてしまったので0〜2のリストに変化しています。ところが、88行目では3を指定しました。3は存在しませんから、範囲外指定をしたものとしてIndexOutOfBoundsExceptionが発生してアプリが落ちているようです。
135
+ のようになっていました。変数quiz1は配列quizData1から得た文字列を挿入したリストになっていますが、~~quizData1の定義では4×5の二次元配列になっているのに、~~ループでtempra1というリストにquizData1から読み込んだデータを積むときに、quizData1[i][0]〜quizData1[i][3]までの4つしか積まれていません。まずここが誤りではないでしょうか。それを格納したリストから1つ`remove()`してしまったら3つに減ってしまいますね。さらに、`get()`するときのインデックスは0から始まるので、元々は0〜3のリスト、そこから1つremoveしてしまったので0〜2のリストに変化しています。ところが、88行目では3を指定しました。3は存在しませんから、範囲外指定をしたものとしてIndexOutOfBoundsExceptionが発生してアプリが落ちているようです。(回答修正)
136
+
137
+
138
+
139
+ ---
140
+
141
+
142
+
143
+ 下図はデバッグ実行してエラーが起きる直前で止めたときの様子です。リストquiz1には0、1、2の3つの要素しかないことがわかります。ここでget(3)を行おうとすると、範囲外指定のエラーで落ちます。
144
+
145
+
146
+
147
+ ![リストの様子](a5457d457ad93bfc541a26a5c956a2f4.png)

4

追記

2020/10/08 08:18

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -9,3 +9,127 @@
9
9
  ```
10
10
 
11
11
  の記述がないのではないでしょうか。この記述も存在するのにやはり落ちるのだとしたら、businessActivityが描画されるときの記述に問題がある可能性がありますが、それを調べるためにはbusinessActivityのソースとアプリが落ちたときのLogCatのスタックトレース(赤字で大量に表示されるエラーメッセージ)をご提示いただく必要があるでしょう。
12
+
13
+
14
+
15
+ ---
16
+
17
+
18
+
19
+ 質問は編集できるので、今後はコードやログの追加提示は質問編集で加えてください。
20
+
21
+
22
+
23
+ LogCatは端末やエミュレーターによって出力されたログを表示するツールのことで、Android Studioの左下の方にLogCatと記されたタブをクリックしてビューを開くことで閲覧することができます。これを開いた状態でアプリを実行して落ちたときに、赤字で10行以上に渡ってメッセージが表示されているはずです。これを見ることでどのソースの何行目で何の要因で落ちたのかを調べることができます。
24
+
25
+
26
+
27
+ ![LogCat](b796eb5cfad2ed9cfe10b9d16bf3615c.png)
28
+
29
+
30
+
31
+ ご提示いただいたbusinessActivity.javaのコードを再現したところ、落ちる現象を確認できました。このとき、LogCatには次のようなエラーログが出力されていました。
32
+
33
+
34
+
35
+ ```text
36
+
37
+ 2020-10-04 16:36:04.088 10362-10362/jp.wings.nikkeibp.quizapp E/AndroidRuntime: FATAL EXCEPTION: main
38
+
39
+ Process: jp.wings.nikkeibp.quizapp, PID: 10362
40
+
41
+ java.lang.RuntimeException: Unable to start activity ComponentInfo{jp.wings.nikkeibp.quizapp/jp.wings.nikkeibp.quizapp.businessActivity}: java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
42
+
43
+ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
44
+
45
+ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
46
+
47
+ at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
48
+
49
+ at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
50
+
51
+ at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
52
+
53
+ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
54
+
55
+ at android.os.Handler.dispatchMessage(Handler.java:107)
56
+
57
+ at android.os.Looper.loop(Looper.java:214)
58
+
59
+ at android.app.ActivityThread.main(ActivityThread.java:7356)
60
+
61
+ at java.lang.reflect.Method.invoke(Native Method)
62
+
63
+ at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
64
+
65
+ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
66
+
67
+ Caused by: java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
68
+
69
+ at java.util.ArrayList.get(ArrayList.java:437)
70
+
71
+ at jp.wings.nikkeibp.quizapp.businessActivity.showNextQuiz1(businessActivity.java:88)
72
+
73
+ at jp.wings.nikkeibp.quizapp.businessActivity.onCreate(businessActivity.java:66)
74
+
75
+ at android.app.Activity.performCreate(Activity.java:7802)
76
+
77
+ at android.app.Activity.performCreate(Activity.java:7791)
78
+
79
+ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
80
+
81
+ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
82
+
83
+ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
84
+
85
+ at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
86
+
87
+ at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
88
+
89
+ at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
90
+
91
+ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
92
+
93
+ at android.os.Handler.dispatchMessage(Handler.java:107) 
94
+
95
+ at android.os.Looper.loop(Looper.java:214) 
96
+
97
+ at android.app.ActivityThread.main(ActivityThread.java:7356) 
98
+
99
+ at java.lang.reflect.Method.invoke(Native Method) 
100
+
101
+ at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
102
+
103
+ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
104
+
105
+ ```
106
+
107
+
108
+
109
+ これにより、businessActivity.javaの88行目でIndexOutOfBoundsExceptionという例外が発生していることがわかります。当該行付近を調べると、
110
+
111
+
112
+
113
+ ```java
114
+
115
+ quiz1.remove(0); // 0をremoveしたのでこの時点で0〜2のリストに
116
+
117
+
118
+
119
+ Collections.shuffle(quiz1);
120
+
121
+
122
+
123
+ answerBtn1_1.setText(quiz1.get(1));
124
+
125
+ answerBtn1_2.setText(quiz1.get(2));
126
+
127
+ answerBtn1_3.setText(quiz1.get(3)); // ここが88行目(3は存在しない)
128
+
129
+ answerBtn1_4.setText(quiz1.get(4));
130
+
131
+ ```
132
+
133
+
134
+
135
+ のようになっていました。変数quiz1は配列quizData1から得た文字列を挿入したリストになっていますが、quizData1の定義では4×5の二次元配列になっているのに、それを格納したリストから1つ`remove()`してしまったら3つに減ってしまいますね。さらに、`get()`するときのインデックスは0から始まるので、元々は0〜3のリスト、そこから1つremoveしてしまったので0〜2のリストに変化しています。ところが、88行目では3を指定しました。3は存在しませんから、範囲外指定をしたものとしてIndexOutOfBoundsExceptionが発生してアプリが落ちているようです。

3

追記

2020/10/04 07:48

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- ```
5
+ ```xml
6
6
 
7
7
  <activity android:name=".businessActivity" />
8
8
 

2

追記

2020/10/01 08:52

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -8,4 +8,4 @@
8
8
 
9
9
  ```
10
10
 
11
- の記述がないのではないでしょうか。この記述も存在するのにやはり落ちるのだとしたら、businessActivityが描画されるときの記述に問題がある可能性がありますが、それにはbusinessActivityのソースとアプリが落ちたときのLogCatのスタックトレース(赤字で大量に表示されるエラーメッセージ)をご提示いただく必要があるでしょう。
11
+ の記述がないのではないでしょうか。この記述も存在するのにやはり落ちるのだとしたら、businessActivityが描画されるときの記述に問題がある可能性がありますが、それを調べるためにはbusinessActivityのソースとアプリが落ちたときのLogCatのスタックトレース(赤字で大量に表示されるエラーメッセージ)をご提示いただく必要があるでしょう。

1

追記

2020/10/01 08:25

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -8,4 +8,4 @@
8
8
 
9
9
  ```
10
10
 
11
- の記述がないのではないでしょうか。
11
+ の記述がないのではないでしょうか。この記述も存在するのにやはり落ちるのだとしたら、businessActivityが描画されるときの記述に問題がある可能性がありますが、それにはbusinessActivityのソースとアプリが落ちたときのLogCatのスタックトレース(赤字で大量に表示されるエラーメッセージ)をご提示いただく必要があるでしょう。