Double.parseDouble如何使我的应用程序崩溃?

时间:2019-06-06 16:01:11

标签: java android

我正在学习Java,并且我已经在youtube上找到了一个很棒的教程,当尝试添加它以满足我的需要时,我遇到了这个问题:

我需要将字符串转换为双精度,进行一些数学运算,然后将结果填充到TextView中。

此外,如果我可以从firebase数据库中获取数据(我的代码在另一项活动中进行的操作),那也很好。

现在,我放弃了从dtb中获取数据的想法,因为每次打开活动时应用程序都会崩溃,在我添加try,catch之后,它确实崩溃了,但是活动为空白且没有错误正在显示。

试图逐行消除错误,以查看问题出在哪里,但是即使只剩下一行,应用程序仍然崩溃。


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText sup =  findViewById(R.id.etSup);
                EditText emi =  findViewById(R.id.etEmi);
                EditText ver =  findViewById(R.id.etVer);
                EditText abs =  findViewById(R.id.etAbs);
                TextView ResultTextView = findViewById(R.id.tvResult);
                TextView Car =  findViewById(R.id.tvCar);
                Double dsup = Double.parseDouble(sup.getText().toString());
                Double demi = Double.parseDouble(emi.getText().toString());
                Double dver = Double.parseDouble(ver.getText().toString());
                Double dabs = Double.parseDouble(abs.getText().toString());

                Double CE = dsup * demi;
                ResultTextView.setText("Total emissions are " + CE);

                Double PS = dver * dabs;
                Double Total = CE - PS;
                Car.setText("Emission balance is " + Total);
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
    }
}

}


没有看到错误消息

1 个答案:

答案 0 :(得分:0)

尝试将整个onClick()方法放入try / catch块中。到parseDouble()方法引发异常时,您不再在onCreate()方法中,因为您在onCreate()中所做的所有工作都是在注册侦听器。 onClick()方法稍后会在

上运行

我不确定从parseDouble调用中可能会遇到什么异常(可能有很多事情,也许是nullpointer?),但是此更改将使您能够找到答案。

以防我不能很好地解释自己:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            // do things
        } catch (Throwable e) {
            e.printStackTrace();
            throw e;
        }
    }
}

编辑:为了确保我们不会遗漏任何东西,将捕获的“异常”更改为“可抛出的”(注意,除调试外,您实际上不应该捕获可抛出的,这就是我抛出它的原因再次)