質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

Q&A

解決済

1回答

2866閲覧

Kotlin 画面遷移できない

aonekox_63

総合スコア2

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Android Emulator

Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

0グッド

0クリップ

投稿2021/08/14 08:48

初心者ですが、質問させてください。
KotlinでAndroid Studioを使いクイズアプリのようなものを作っています。
エミュレータでRunすると、「Launch succeeded」となり起動しますが、遷移がうまくいかない画面があります。

具体的には、「問題」画面で、正解すると「正解」画面に、不正解だと「不正解」画面に行くようにしているのですが、正解した時に、「正解」画面に行かずに別の画面になってしまったり、アプリが落ちてしまったりします。
それ以外の画面遷移はできてます。

何度もコードを見直してはいるのですが、自分では解決できなかったため、
わかる方教えてください。

失敗する遷移元と遷移先のコード、あとManifestも貼っておきます。

<遷移元>問題画面

Kotlin

1class AC_Q : AppCompatActivity() { 2 3 val words = mutableListOf( 4 "ahiru", 5 "airon", 6 "aisukurimu", 7     "zubonn" 8 ) 9 10 lateinit var mp:MediaPlayer 11 12 override fun onCreate(savedInstanceState: Bundle?) { 13 super.onCreate(savedInstanceState) 14 setContentView(R.layout.activity_ac_q) 15 words.shuffle() 16 17 val correctAN = (0..5).random() 18 19 var qNum = intent.getIntExtra("Q_COUNT", 0) 20 var score = intent.getIntExtra("RIGHT_ANSWER_COUNT", 0) 21 22 val imageButton1 = findViewById<ImageButton>(R.id.image1) 23 val resId1 = resources.getIdentifier(words[0], "drawable", packageName) 24 imageButton1.setImageResource(resId1) 25 26 val imageButton2 = findViewById<ImageButton>(R.id.image2) 27 val resId2 = resources.getIdentifier(words[1], "drawable", packageName) 28 imageButton2.setImageResource(resId2) 29 30 val imageButton3 = findViewById<ImageButton>(R.id.image3) 31 val resId3 = resources.getIdentifier(words[2], "drawable", packageName) 32 imageButton3.setImageResource(resId3) 33 34 val imageButton4 = findViewById<ImageButton>(R.id.image4) 35 val resId4 = resources.getIdentifier(words[3], "drawable", packageName) 36 imageButton4.setImageResource(resId4) 37 38 val imageButton5 = findViewById<ImageButton>(R.id.image5) 39 val resId5 = resources.getIdentifier(words[4], "drawable", packageName) 40 imageButton5.setImageResource(resId5) 41 42 val imageButton6 = findViewById<ImageButton>(R.id.image6) 43 val resId6 = resources.getIdentifier(words[5], "drawable", packageName) 44 imageButton6.setImageResource(resId6) 45 46 val spButton = findViewById<ImageButton>(R.id.listenButton) 47 val correctAnswer = resources.getIdentifier(words[correctAN], "raw", packageName) 48 mp = MediaPlayer.create(applicationContext, correctAnswer) 49 50 imageButton1.isClickable = false 51 imageButton2.isClickable = false 52 imageButton3.isClickable = false 53 imageButton4.isClickable = false 54 imageButton5.isClickable = false 55 imageButton6.isClickable = false 56 57 spButton.setOnClickListener { 58 mp.start() 59 60 imageButton1.isClickable = true 61 imageButton2.isClickable = true 62 imageButton3.isClickable = true 63 imageButton4.isClickable = true 64 imageButton5.isClickable = true 65 imageButton6.isClickable = true 66 67 qNum++ 68 } 69 70 imageButton1.setOnClickListener { 71 72 if (correctAN.equals(0)){ 73 val intent = Intent(this, AC_Correct::class.java) 74 score++ 75 76 // 渡したいデータとキーを指定する 77 intent.putExtra("qCount", qNum) 78 intent.putExtra("rightAnswerCount", score) 79 80 // 画面切り替え 81 startActivity(intent); 82 finish(); 83 } else { 84 val intent = Intent(this, AC_Incorrect::class.java) 85 86 // 渡したいデータとキーを指定する 87 intent.putExtra("qCount", qNum) 88 intent.putExtra("rightAnswerCount", score) 89 intent.putExtra("Word1", words[0]) 90 intent.putExtra("Word2", words[1]) 91 intent.putExtra("Word3", words[2]) 92 intent.putExtra("Word4", words[3]) 93 intent.putExtra("Word5", words[4]) 94 intent.putExtra("Word6", words[5]) 95 intent.putExtra("Answer", words[correctAN]) 96 97 // 画面切り替え 98 startActivity(intent); 99 finish(); 100 } 101 102 } 103 104 imageButton2.setOnClickListener { 105 if (correctAN.equals(1)){ 106 val intent = Intent(this, AC_Correct::class.java) 107 score++ 108 109 // 渡したいデータとキーを指定する 110 intent.putExtra("qCount", qNum) 111 intent.putExtra("rightAnswerCount", score) 112 113 // 画面切り替え 114 startActivity(intent); 115 finish(); 116 } else { 117 val intent = Intent(this, AC_Incorrect::class.java) 118 119 // 渡したいデータとキーを指定する 120 intent.putExtra("qCount", qNum) 121 intent.putExtra("rightAnswerCount", score) 122 intent.putExtra("Word1", words[0]) 123 intent.putExtra("Word2", words[1]) 124 intent.putExtra("Word3", words[2]) 125 intent.putExtra("Word4", words[3]) 126 intent.putExtra("Word5", words[4]) 127 intent.putExtra("Word6", words[5]) 128 intent.putExtra("Answer", words[correctAN]) 129 130 // 画面切り替え 131 startActivity(intent); 132 finish(); 133 } 134 } 135 136 } 137 138} 139

<遷移先>正解画面

Kotlin

1package com.example.langtherapy 2 3import android.content.Intent 4import androidx.appcompat.app.AppCompatActivity 5import android.os.Bundle 6import android.view.View 7import android.widget.Button 8 9class AC_Correct : AppCompatActivity() { 10 override fun onCreate(savedInstanceState: Bundle?) { 11 super.onCreate(savedInstanceState) 12 setContentView(R.layout.activity_ac_correct) 13 14 val qNum = intent.getIntExtra("qCount", 0) 15 val score = intent.getIntExtra("rightAnswerCount", 0) 16 17 //val toMenu = findViewById<Button>(R.id.toMenu) 18 //toMenu.setOnClickListener (object : View.OnClickListener { 19 // override fun onClick(v: View?) { 20 // val intent = Intent(this@AC_Correct, MainActivity::class.java) 21 // startActivity(intent) 22 //}}) 23 24 val nextQ = findViewById<Button>(R.id.NextQ) 25 26 nextQ.setOnClickListener (object : View.OnClickListener { 27 override fun onClick(v: View?) { 28 29 if (qNum.equals(10)) { 30 31 //3.Intentクラスのオブジェクトを生成。 32 val intent = Intent(this@AC_Correct, AC_Result::class.java) 33 34 intent.putExtra("rightAnswerCount", score) 35 36 //生成したオブジェクトを引数に画面を起動! 37 startActivity(intent) 38 39 } else { 40 //3.Intentクラスのオブジェクトを生成。 41 val intent = Intent(this@AC_Correct, AC_Q::class.java) 42 43 // 渡したいデータとキーを指定する 44 intent.putExtra("Q_COUNT", qNum) 45 intent.putExtra("RIGHT_ANSWER_COUNT", score) 46 47 //生成したオブジェクトを引数に画面を起動! 48 startActivity(intent) 49 } 50 } 51 52 }) 53 } 54

<AndroidManifest>

Kotlin

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.langtherapy"> 4 5 <application 6 android:allowBackup="true" 7 android:icon="@mipmap/ic_launcher" 8 android:label="@string/app_name" 9 android:roundIcon="@mipmap/ic_launcher_round" 10 android:supportsRtl="true" 11 android:theme="@style/Theme.LangTherapy"> 12 <activity android:name=".AC_Result"></activity> 13 <activity android:name=".AC_Answer" /> 14 <activity android:name=".AC_Incorrect" /> 15 <activity android:name=".AC_Correct" /> 16 <activity android:name=".AC_Q" /> 17 <activity android:name=".MainActivity"> 18 <intent-filter> 19 <action android:name="android.intent.action.MAIN" /> 20 21 <category android:name="android.intent.category.LAUNCHER" /> 22 </intent-filter> 23 </activity> 24 </application> 25 26</manifest>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aonekox_63

2021/08/14 10:55

ありがとうございます。 エラーメッセージかどうかよくわからないのですが、、Runウインドウでこのように表示されていました。自分では解読不能です。すみません。 W/System: A resource failed to call close. D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.langtherapy, PID: 14004 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.langtherapy/com.example.langtherapy.AC_Correct}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at com.example.langtherapy.AC_Correct.onCreate(AC_Correct.kt:26) at android.app.Activity.performCreate(Activity.java:8000) at android.app.Activity.performCreate(Activity.java:7984) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:223)  at android.app.ActivityThread.main(ActivityThread.java:7656)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
hoshi-takanori

2021/08/14 11:07

> Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference > at com.example.langtherapy.AC_Correct.onCreate(AC_Correct.kt:26) なので、AC_Correct クラスの onCreate メソッドで setOnClickListener を呼び出してるところで、ボタンが null ってことですね。 つまり、nextQ が null なので、activity_ac_correct.xml に id が NextQ のボタンが存在するかご確認ください。
aonekox_63

2021/08/14 11:21

activity_ac_correct.xmlのidがNextQになっていませんでした。 修正したら無事解決しました。 ありがとうございました!!
guest

回答1

0

自己解決

hoshi-takanoriさんにコメントいただき、プログラムとxmlのidが一致していなかったためと判明しました。そこを修正したら無事解決しました。

投稿2021/08/14 11:34

aonekox_63

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問