Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android应用程序崩溃,代码中没有错误_Java_Android - Fatal编程技术网

Java Android应用程序崩溃,代码中没有错误

Java Android应用程序崩溃,代码中没有错误,java,android,Java,Android,我正在制作一个Android应用程序,它应该询问算术公式并检查答案。也应该有不同的难度。从AlertDialog选择难度级别时,我的应用程序崩溃。我在Android Studio中没有错误 以下是选择级别的代码: public void onClick(View view) { if(view.getId()==R.id.play_btn){ //play button AlertDialog.Builder builder = new AlertDial

我正在制作一个Android应用程序,它应该询问算术公式并检查答案。也应该有不同的难度。从
AlertDialog
选择难度级别时,我的应用程序崩溃。我在Android Studio中没有错误

以下是选择级别的代码:

public void onClick(View view) {
    if(view.getId()==R.id.play_btn){
        //play button
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Choose a level")
                .setSingleChoiceItems(levelNames, 0, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        //start gameplay
                        startPlay(which);
                    }
                });
        AlertDialog ad = builder.create();
        ad.show();
    }

private void startPlay(int chosenLevel){
    //start gameplay
    Intent playIntent = new Intent(this, PlayGame.class);
    playIntent.putExtra("level", chosenLevel);
    this.startActivity(playIntent);
}
有人能帮我理解为什么我的应用程序会崩溃吗

以下是日志:

9758-9758/org.example.braintraining E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: org.example.braintraining, PID: 9758
                                                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{org.example.braintraining/org.example.braintraining.PlayGame}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.os.Bundle.getInt(java.lang.String)' on a null object reference
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2693)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
                                                                         at android.app.ActivityThread.access$900(ActivityThread.java:177)
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                         at android.os.Looper.loop(Looper.java:145)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5942)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at java.lang.reflect.Method.invoke(Method.java:372)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
                                                                      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.os.Bundle.getInt(java.lang.String)' on a null object reference
                                                                         at org.example.braintraining.PlayGame.onCreate(PlayGame.java:104)
                                                                         at android.app.Activity.performCreate(Activity.java:6289)
                                                                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758) 
                                                                         at android.app.ActivityThread.access$900(ActivityThread.java:177) 
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                         at android.os.Looper.loop(Looper.java:145) 
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5942) 
                                                                         at java.lang.reflect.Method.invoke(Native Method) 
                                                                         at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388) 
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) 
以下是
PlayGame
类的
onCreate
方法的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_playgame);
    gamePrefs = getSharedPreferences(GAME_PREFS, 0);

    //text and image views
    question = (TextView)findViewById(R.id.question);
    answerTxt = (TextView)findViewById(R.id.answer);
    response = (ImageView)findViewById(R.id.response);
    scoreTxt = (TextView)findViewById(R.id.score);

    //hide tick cross initially
    response.setVisibility(View.INVISIBLE);

    //number, enter and clear buttons
    btn1 = (Button)findViewById(R.id.btn1);
    btn2 = (Button)findViewById(R.id.btn2);
    btn3 = (Button)findViewById(R.id.btn3);
    btn4 = (Button)findViewById(R.id.btn4);
    btn5 = (Button)findViewById(R.id.btn5);
    btn6 = (Button)findViewById(R.id.btn6);
    btn7 = (Button)findViewById(R.id.btn7);
    btn8 = (Button)findViewById(R.id.btn8);
    btn9 = (Button)findViewById(R.id.btn9);
    btn0 = (Button)findViewById(R.id.btn0);
    enterBtn = (Button)findViewById(R.id.enter);
    clearBtn = (Button)findViewById(R.id.clear);

    //listen for clicks
    btn1.setOnClickListener(this);
    btn2.setOnClickListener(this);
    btn3.setOnClickListener(this);
    btn4.setOnClickListener(this);
    btn5.setOnClickListener(this);
    btn6.setOnClickListener(this);
    btn7.setOnClickListener(this);
    btn8.setOnClickListener(this);
    btn9.setOnClickListener(this);
    btn0.setOnClickListener(this);
    enterBtn.setOnClickListener(this);
    clearBtn.setOnClickListener(this);

    //get passed level number
    if(savedInstanceState!=null){
        //restore state
    }
    else{
        Bundle extras = getIntent().getExtras();
        if(extras !=null)
        {
            int passedLevel = extras.getInt("level", -1);
            if(passedLevel>=0) level = passedLevel;
            level=savedInstanceState.getInt("level");
            int exScore = savedInstanceState.getInt("score");
            scoreTxt.setText("Score: "+exScore);
        }
    }

    //initialize random
    random = new Random();
    //play
    chooseQuestion();
}

原因:java.lang.NullPointerException:试图在org.example.braintraining.PlayGame.onCreate(PlayGame.java:10)上的空对象引用上调用虚拟方法“int android.os.Bundle.getInt(java.lang.String)”‌​(四)

在两种情况下,代码可能会失败:

  • 您正在通过传递playIntent开始新活动。请检查PlayGame.java中的代码,在onCreate()中,您应该从Intent而不是Bundle中获取字符串值(级别),例如
  • 2.如果您正在旋转屏幕,则在游戏活动中,您没有在活动被销毁之前保存所需的值,并在活动重新创建后尝试将其检索回来

    解决方案是使用put方法在onSaveInstanceState()中存储值:

    并从onCreate()中的Bundle还原值,或者可以使用onRestoreInstanceState(),它在onStart()之后调用,而onCreate()在onStart()之前调用:


    你能添加崩溃日志吗?我想你忘了在Androidmanifest.xmlYes中定义PlayGame活动了,我添加了日志。@savepopulation它在那里:
    原因:java.lang.NullPointerException:尝试调用虚拟方法'int android.os.Bundle.getInt(java.lang.String)'在org.example.braintraining.PlayGame.onCreate(PlayGame.java:104)上的空对象引用上
    请解释此错误消息让您感到困惑的地方,它告诉您错误是什么以及发生在哪里。
     String chosenLevel;
     Intent i = this.getIntent();
     if(i != null){
      chosenLevel = i.getStringExtra("level");
     }
    
    protected void onSaveInstanceState(Bundle bundle) {
    super.onSaveInstanceState(bundle);
    bundle.putString("value", chosenLevel);
    } 
    
    public void onCreate(Bundle bundle) {
    if (bundle!= null){
    chosenValue = bundle.getString("value");
     } 
    }