有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

switch/cases场景中的java if语句使我的应用程序崩溃

使用AndroidStudio和Java,我正试图构建一个应用程序,根据之前其他按钮的点击输入输出不同的信息。我遇到的问题是Switch/Case中的if语句,每当不满足条件时,它就会使应用程序崩溃。在这种情况下,当变量bUttn不等于“3”时,按钮5会使整个应用程序崩溃。当条件满足时,它工作得很好,并且它做了它应该做的事情。我做错了什么

以下是我的代码示例:

Package com.example.testjava4;

import 安卓x.appcompat.app.AppCompatActivity;

import 安卓.annotation.SuppressLint;
import 安卓.app.Activity;
import 安卓.os.Bundle;
import 安卓.util.Log;
import 安卓.view.View;
import 安卓.view.View.OnClickListener;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.Button;
import 安卓.widget.ListView;
import java.util.Arrays;


public class MainActivity extends Activity implements View.OnClickListener {

    ListView list;
    String[] kakNmbrs = {"1+2+5+8+9", "1+2+6+7+9", "1+3+4+8+9", "1+3+5+7+9", "1+3+6+7+8", "1+4+5+6+9", "1+4+5+7+8",
            "2+3+4+7+9", "2+3+5+6+9", "2+3+5+7+8", "2+4+5+6+8", "3+4+5+6+7"};
    String bUttn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn3 = (Button) findViewById(R.id.button3);
        Button btn4 = (Button) findViewById(R.id.button4);
        Button btn5 = (Button) findViewById(R.id.button5);
        btn3.setOnClickListener(this); // calling onClick() method
        btn4.setOnClickListener(this);
        btn5.setOnClickListener(this);
    }

    @SuppressLint("NonConstantResourceId")
    @Override

    public void onClick(View v) {
        Button bTTon4 = (Button) findViewById(R.id.button4);
        list = findViewById(R.id.myList);
        Arrays.sort(kakNmbrs);
        ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.mytextsize, 安卓.R.id.text1, kakNmbrs);
        switch (v.getId()) {

            case R.id.button3:
                bUttn = "3";
                Log.i(bUttn, "I just clicked on");
                break;

            case  R.id.button4:
                break;

            case  R.id.button5:
               if (bUttn.equals("3")) {
                    list.setAdapter(adapter);
                   bTTon4.setVisibility(View.INVISIBLE);
                break;
                }


        }
    }
}

这是logcat日志,如果有帮助的话:

11/11 14:37:59: Launching 'app' on Andi Emu API 22. Install successfully finished in 8 s 374 ms. $ adb shell am start -n "com.example.testjava4/com.example.testjava4.MainActivity" -a 安卓.intent.action.MAIN -c 安卓.intent.category.LAUNCHER Connected to process 6809 on device 'emulator-5554'. Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page. D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true D/: HostConnection::get() New Host Connection established 0xb40f1ce0, tid 6809 D/Atlas: Validating map... D/: HostConnection::get() New Host Connection established 0xb43fb330, tid 6825 I/OpenGLRenderer: Initialized EGL, version 1.4 W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without... D/EGL_emulation: eglCreateContext: 0xb42a4b80: maj 2 min 0 rcv 2 D/EGL_emulation: eglMakeCurrent: 0xb42a4b80: ver 2 0 (tinfo 0xb4272ce0) D/OpenGLRenderer: Enabling debug mode 0 D/EGL_emulation: eglMakeCurrent: 0xb42a4b80: ver 2 0 (tinfo 0xb4272ce0) D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.testjava4, PID: 6809
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
        at com.example.testjava4.MainActivity.onClick(MainActivity.java:55)
        at 安卓.view.View.performClick(View.java:4780)
        at 安卓.view.View$PerformClick.run(View.java:19866)
        at 安卓.os.Handler.handleCallback(Handler.java:739)
        at 安卓.os.Handler.dispatchMessage(Handler.java:95)
        at 安卓.os.Looper.loop(Looper.java:135)
        at 安卓.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:698)

共 (2) 个答案

  1. # 1 楼答案

    它崩溃的原因是字符串变量bUttn仅在R.id.button3的情况下初始化。这很重要,因为如果没有初始化,bUttn将为null

    所以,如果case R.id.button5为true,那么bUttn将永远不会被初始化,因为初始化发生在不同的情况下,并且调用。null字符串上的等于()将导致NullPointerException

  2. # 2 楼答案

    您刚刚声明了bUttn变量。您没有初始化bUttn。这就是为什么它显示NullPointer Exception。因为在if的情况下,你正在比较bUttn值和3。但当时Button已经{}

    你应该把String bUttn;改为String bUttn=""String bUttn="0"

    如果bUttn将是Int值,可以将bUttn的数据类型更改为Int