【问题标题】:how to call many methods in another in android studio如何在android studio中调用另一个方法
【发布时间】:2019-11-04 17:09:28
【问题描述】:

我正在 android studio 上创建一个测验应用程序。我需要在提交时显示带有用户分数的祝酒词。我想在 submitOnClick 方法中调用我的 calculateScore 方法,但 calculateScore 方法会使应用程序崩溃。

如果我在提交中调用 calculateScore,应用程序崩溃,如果我调用它 onClick,应用程序崩溃。

我的代码:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Button button = findViewById(R.id.submit);
        button.setOnClickListener(submitOnClick);

    }

    final View.OnClickListener submitOnClick = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            calculateScore();

            Toast.makeText(MainActivity.this, "Your score is " + score, Toast.LENGTH_LONG).show();
        }
    };

        public void checkQuestion1(View view) {
            boolean checked = ((RadioButton) view).isChecked();

            // Check which radio button was clicked
            switch (view.getId()) {
                case R.id.right:
                    if (checked)
                        score += 1;
                    break;
                case R.id.wrong:
                    if (checked)
                        score += 0;
                    break;
            }

        }

        public void checkQuestion2(View view) {

            CheckBox function = findViewById(R.id.checkbox_function);
            CheckBox undefined = findViewById(R.id.checkbox_undefined);
            CheckBox booleans = findViewById(R.id.checkbox_booleans);

            boolean isCheckedFunction = function.isChecked();
            boolean isCheckedUndefined = undefined.isChecked();
            boolean isCheckedBooleans = booleans.isChecked();

            if (isCheckedUndefined && isCheckedBooleans && !isCheckedFunction) {
                score += 1;
            } else {
                score += 0;
            }

        }

        public void checkQuestion3(View view) {

            EditText userInput = findViewById(R.id.inputAnswer);
            String name = userInput.getText().toString();

            if (name.trim().equalsIgnoreCase("Class")) {
                score += 1;
            } else {
                score += 0;
            }
        }

        public void checkQuestion4(View view) {
            boolean checked = ((RadioButton) view).isChecked();
            switch (view.getId()) {
                case R.id.correct:
                    if (checked)
                        score += 1;
                    break;
                case R.id.incorrect:
                    if (checked)
                        score += 0;
                    break;
            }

        }

        public void checkQuestion5(View view) {

            CheckBox correctOne = findViewById(R.id.checkbox_correct_one);
            CheckBox correctTwo = findViewById(R.id.checkbox_correct_two);
            CheckBox incorrectOne = findViewById(R.id.checkbox_incorrect_one);
            CheckBox incorrectTwo = findViewById(R.id.checkbox_incorrect_two);
            boolean isCheckedCorrectOne = correctOne.isChecked();
            boolean isCheckedCorrectTwo = correctTwo.isChecked();
            boolean isCheckedIncorrectOne = incorrectOne.isChecked();
            boolean isCheckedIncorrectTwo = incorrectTwo.isChecked();

            if (isCheckedCorrectOne && isCheckedCorrectTwo && !isCheckedIncorrectOne & !isCheckedIncorrectTwo) {
                score += 1;
            } else {
                score += 0 ;
            }

        }


        public void calculateScore(){
            checkQuestion2(null);
            checkQuestion1(null );
            checkQuestion3(null);
            checkQuestion4(null);
            checkQuestion5(null);
        }

日志猫: --------- 崩溃开始

2019-11-04 10:09:57.514 11886-11886/com.example.android.quizzapp E/AndroidRuntime: 致命异常: main 进程:com.example.android.quizzapp,PID:11886 java.lang.NullPointerException:尝试在空对象上调用虚拟方法“boolean android.widget.CompoundButton.isChecked()” 参考 在 com.example.android.quizzapp.MainActivity.checkQuestion1(MainActivity.java:39) 在 com.example.android.quizzapp.MainActivity.calculateScore(MainActivity.java:122) 在 com.example.android.quizzapp.MainActivity$1.onClick(MainActivity.java:32) 在 android.view.View.performClick(View.java:5610) 在 android.view.View$PerformClick.run(View.java:22265) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

【问题讨论】:

  • 发布您的日志猫。所以我们可以看看你得到的错误。
  • 刚刚添加了日志
  • 作为错误状态,它是一个空指针。你将它指向一个什么都不存在的地方(null)。这个CompoundButton 存在吗?看看

标签: java android


【解决方案1】:

你打电话

checkQuestion1(null )

null,所以它与 NPE 一起崩溃

【讨论】:

  • 既然 checkQuestion one 接受了一个视图,我如何在不传入任何内容的情况下调用它?
  • @TEbogo 您的checkQuestion 方法无法处理任何此类情况。目前尚不清楚在这种情况下您的预期结果是什么。
  • 我听到每个人都在说什么,但我仍然不知道如何修复崩溃。如果我以其他方式编写它们,我的方法将不起作用。我
  • 我最终通过传递视图来计算分数,然后将其传递给 checkquestion 方法来修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 2015-06-16
相关资源
最近更新 更多