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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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

解決済

画面遷移するとアプリが落ちてしまう

rott
rott

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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

1回答

0評価

0クリップ

319閲覧

投稿2021/12/22 04:30

編集2021/12/22 13:58

前提・実現したいこと

問題なくビルドが出来ているのですが、アプリを起動した後ボタンを押して画面遷移したときにアプリが落ちてしまいます。

発生している問題・エラーメッセージ

アプリが落ちた時のlogcatの内容

2021-12-22 13:18:12.095 4280-4280/com.example.namaeate E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.namaeate, PID: 4280 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.namaeate/com.example.namaeate.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Intent.getIntExtra(java.lang.String, int)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3365) 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 'int android.content.Intent.getIntExtra(java.lang.String, int)' on a null object reference at com.example.namaeate.MainActivity.<init>(MainActivity.java:27) at java.lang.Class.newInstance(Native Method) at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95) at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45) at android.app.Instrumentation.newActivity(Instrumentation.java:1253) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3353) 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) 

該当のソースコード

StartMenu.java

public class StartMenu extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_start); Button button = findViewById(R.id.StartButton); button.setOnClickListener((View v) -> { startActivity(new Intent(StartMenu.this, MainActivity.class)); }); } }

MainActivity.java

public class MainActivity extends AppCompatActivity { private TextView tvCount; private Button ansBtn1; private Button ansBtn2; private Button ansBtn3; private Button ansBtn4; public int prob = 5; //問題数 Intent intent = getIntent(); Integer i = intent.getIntExtra("i",0); Integer ans = intent.getIntExtra("ans",0); Integer count = intent.getIntExtra("count",0); //正解数 Integer backcount = intent.getIntExtra("backcount",0); //やり直し回数 // クイズデータの準備 String[][] quizData = { // {"正解", "選択肢1", "選択肢2", "選択肢3"} {"A1", "A2", "A3", "A4"}, {"B1", "B2", "B3", "B4"}, {"C1", "C2", "C3", "C4"}, {"D1", "D2", "D3", "D4"}, {"E1", "E2", "E3", "E4"}, {"F1", "F2", "F3", "F4"}, {"G1", "G2", "G3", "G4"}, {"H1", "H2", "H3", "H4"}, {"I1", "I2", "I3", "I4"}, {"J1", "J2", "J3", "J4"} }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getId(); showQuiz(); } public void getId(){ tvCount = findViewById(R.id.tvCount); ansBtn1 = findViewById(R.id.bt1); ansBtn2 = findViewById(R.id.bt2); ansBtn3 = findViewById(R.id.bt3); ansBtn4 = findViewById(R.id.bt4); } public void showQuiz(){ //シャッフル List<Integer> num = Arrays.asList(0, 1, 2, 3); Collections.shuffle(num); tvCount.setText( i ); ansBtn1.setText(quizData[i][num.get(0)]); ansBtn2.setText(quizData[i][num.get(1)]); ansBtn3.setText(quizData[i][num.get(2)]); ansBtn4.setText(quizData[i][num.get(3)]); } public void onButton(View view){ //押されたボタン Button clickedBtn =(Button)view; String clickedAns =clickedBtn.getText().toString(); if(clickedAns.equals(quizData[i][1])){ //正解 count++; ans = 0; }else{ //不正解 ans = 1; } Intent intent = new Intent(MainActivity.this,Answer.class); //Answerに送る変数 intent.putExtra("ans",ans); intent.putExtra("i",i); intent.putExtra("prob",prob); intent.putExtra("count",count); intent.putExtra("backcount",backcount); startActivity(intent); } }

Answer.java

public class Answer extends AppCompatActivity { private Button back; private Button next; //MainActivityから読み込み Intent intent = getIntent(); public int i = intent.getIntExtra("i",0); public int ans = intent.getIntExtra("ans",0); public int count = intent.getIntExtra("count",0); public int backcount = intent.getIntExtra("backcount",0); public int prob = intent.getIntExtra("prob",5); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_answer); getId(); showAnswer(); } public void getId(){ back = findViewById(R.id.BackButton); next = findViewById(R.id.NextButton); } public void showAnswer(){ ImageView Answer_picture = findViewById(R.id.Answer_picture); AssetManager assets = getResources().getAssets(); if(ans == 0){ //正解時 Answer_picture.setImageResource(R.drawable.maru); }else{ //不正解 Answer_picture.setImageResource(R.drawable.batsu); } } public void onNext(View view){ if(i == prob-1){ Intent intent = new Intent(Answer.this,result.class); //Resultに送る変数 intent.putExtra("count",count); intent.putExtra("backcount",backcount); intent.putExtra("prob",prob); startActivity(intent); }else{ i++; Intent intent = new Intent(Answer.this,MainActivity.class); //MainActivityに送る変数 intent.putExtra("i",i); intent.putExtra("count",count); intent.putExtra("backcount",backcount); startActivity(intent); } finish(); } public void onBack(View view){ backcount++; finish(); }

試したこと

manifest.xml

<activity android:name=".MainActivity" android:exported="true" android:screenOrientation="landscape" /> <activity android:name=".StartMenu" android:exported="true" android:screenOrientation="landscape" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

補足情報(FW/ツールのバージョンなど)

Androidstudioのバージョン

Android Studio Arctic Fox | 2020.3.1 Patch 4
Build #AI-203.7717.56.2031.7935034, built on November 21, 2021
ランタイム・バージョン: 11.0.10+0-b96-7249189 amd64
VM: OpenJDK 64-Bit Server VM by Oracle Corporation
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 1280M
Cores: 6
Registry: external.system.auto.import.disabled=true
Non-Bundled Plugins: org.jetbrains.kotlin

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2021/12/22 12:54 編集

> (MainActivity.java:27) と発生場所が明記されています。 MainActivity の始めにある > Intent intent = getIntent(); > Integer i = intent.getIntExtra("i",0); > Integer ans = intent.getIntExtra("ans",0); > Integer count = intent.getIntExtra("count",0); //正解数 > Integer backcount = intent.getIntExtra("backcount",0); //やり直し回数 が異常の元になっています。 それから、ファイル名等は大文字小文字も正確に記述してください。間違えない為のコピペが意味が無くなります。
rott

2021/12/22 13:55

回答ありがとうございます。 Integer i = intent.getIntExtra("i",0); ⇒ public int i ; に変え、ShowQuiz()内を tvCount.setText( String.valueOf(i) ); としたことで画面遷移が出来るようになりました。 ですが、MainActivity.javaとAnswer.java内で数値を共有させたいので、出来れば原因をどのように直せばいいのかを教えてもらえたら幸いです。
jimbe

2021/12/22 14:58

startActivity 等での intent によるパラメータの受け渡し方法を確認されては如何でしょうか。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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