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

回答編集履歴

5

追記

2020/10/08 08:18

投稿

keicha_hrs
keicha_hrs

スコア6768

answer CHANGED
@@ -65,4 +65,10 @@
65
65
  answerBtn1_4.setText(quiz1.get(4));
66
66
  ```
67
67
 
68
- のようになっていました。変数quiz1は配列quizData1から得た文字列を挿入したリストになっていますが、quizData1の定義では4×5の二次元配列になっているのに、それを格納したリストから1つ`remove()`してしまったら3つに減ってしまいますね。さらに、`get()`するときのインデックスは0から始まるので、元々は0〜3のリスト、そこから1つremoveしてしまったので0〜2のリストに変化しています。ところが、88行目では3を指定しました。3は存在しませんから、範囲外指定をしたものとしてIndexOutOfBoundsExceptionが発生してアプリが落ちているようです。
68
+ のようになっていました。変数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が発生してアプリが落ちているようです。(回答修正)
69
+
70
+ ---
71
+
72
+ 下図はデバッグ実行してエラーが起きる直前で止めたときの様子です。リストquiz1には0、1、2の3つの要素しかないことがわかります。ここでget(3)を行おうとすると、範囲外指定のエラーで落ちます。
73
+
74
+ ![リストの様子](a5457d457ad93bfc541a26a5c956a2f4.png)

4

追記

2020/10/08 08:18

投稿

keicha_hrs
keicha_hrs

スコア6768

answer CHANGED
@@ -3,4 +3,66 @@
3
3
  ```xml
4
4
  <activity android:name=".businessActivity" />
5
5
  ```
6
- の記述がないのではないでしょうか。この記述も存在するのにやはり落ちるのだとしたら、businessActivityが描画されるときの記述に問題がある可能性がありますが、それを調べるためにはbusinessActivityのソースとアプリが落ちたときのLogCatのスタックトレース(赤字で大量に表示されるエラーメッセージ)をご提示いただく必要があるでしょう。
6
+ の記述がないのではないでしょうか。この記述も存在するのにやはり落ちるのだとしたら、businessActivityが描画されるときの記述に問題がある可能性がありますが、それを調べるためにはbusinessActivityのソースとアプリが落ちたときのLogCatのスタックトレース(赤字で大量に表示されるエラーメッセージ)をご提示いただく必要があるでしょう。
7
+
8
+ ---
9
+
10
+ 質問は編集できるので、今後はコードやログの追加提示は質問編集で加えてください。
11
+
12
+ LogCatは端末やエミュレーターによって出力されたログを表示するツールのことで、Android Studioの左下の方にLogCatと記されたタブをクリックしてビューを開くことで閲覧することができます。これを開いた状態でアプリを実行して落ちたときに、赤字で10行以上に渡ってメッセージが表示されているはずです。これを見ることでどのソースの何行目で何の要因で落ちたのかを調べることができます。
13
+
14
+ ![LogCat](b796eb5cfad2ed9cfe10b9d16bf3615c.png)
15
+
16
+ ご提示いただいたbusinessActivity.javaのコードを再現したところ、落ちる現象を確認できました。このとき、LogCatには次のようなエラーログが出力されていました。
17
+
18
+ ```text
19
+ 2020-10-04 16:36:04.088 10362-10362/jp.wings.nikkeibp.quizapp E/AndroidRuntime: FATAL EXCEPTION: main
20
+ Process: jp.wings.nikkeibp.quizapp, PID: 10362
21
+ java.lang.RuntimeException: Unable to start activity ComponentInfo{jp.wings.nikkeibp.quizapp/jp.wings.nikkeibp.quizapp.businessActivity}: java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
22
+ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
23
+ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
24
+ at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
25
+ at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
26
+ at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
27
+ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
28
+ at android.os.Handler.dispatchMessage(Handler.java:107)
29
+ at android.os.Looper.loop(Looper.java:214)
30
+ at android.app.ActivityThread.main(ActivityThread.java:7356)
31
+ at java.lang.reflect.Method.invoke(Native Method)
32
+ at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
33
+ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
34
+ Caused by: java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
35
+ at java.util.ArrayList.get(ArrayList.java:437)
36
+ at jp.wings.nikkeibp.quizapp.businessActivity.showNextQuiz1(businessActivity.java:88)
37
+ at jp.wings.nikkeibp.quizapp.businessActivity.onCreate(businessActivity.java:66)
38
+ at android.app.Activity.performCreate(Activity.java:7802)
39
+ at android.app.Activity.performCreate(Activity.java:7791)
40
+ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
41
+ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
42
+ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
43
+ at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
44
+ at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
45
+ at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
46
+ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
47
+ at android.os.Handler.dispatchMessage(Handler.java:107) 
48
+ at android.os.Looper.loop(Looper.java:214) 
49
+ at android.app.ActivityThread.main(ActivityThread.java:7356) 
50
+ at java.lang.reflect.Method.invoke(Native Method) 
51
+ at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
52
+ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
53
+ ```
54
+
55
+ これにより、businessActivity.javaの88行目でIndexOutOfBoundsExceptionという例外が発生していることがわかります。当該行付近を調べると、
56
+
57
+ ```java
58
+ quiz1.remove(0); // 0をremoveしたのでこの時点で0〜2のリストに
59
+
60
+ Collections.shuffle(quiz1);
61
+
62
+ answerBtn1_1.setText(quiz1.get(1));
63
+ answerBtn1_2.setText(quiz1.get(2));
64
+ answerBtn1_3.setText(quiz1.get(3)); // ここが88行目(3は存在しない)
65
+ answerBtn1_4.setText(quiz1.get(4));
66
+ ```
67
+
68
+ のようになっていました。変数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

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  コード上におかしな点は見当たりません。それでも画面遷移でアプリが落ちるとしたら、AndroidManifest.xmlに
2
2
 
3
- ```
3
+ ```xml
4
4
  <activity android:name=".businessActivity" />
5
5
  ```
6
6
  の記述がないのではないでしょうか。この記述も存在するのにやはり落ちるのだとしたら、businessActivityが描画されるときの記述に問題がある可能性がありますが、それを調べるためにはbusinessActivityのソースとアプリが落ちたときのLogCatのスタックトレース(赤字で大量に表示されるエラーメッセージ)をご提示いただく必要があるでしょう。

2

追記

2020/10/01 08:52

投稿

keicha_hrs
keicha_hrs

スコア6768

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

1

追記

2020/10/01 08:25

投稿

keicha_hrs
keicha_hrs

スコア6768

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