从组件加载变量后,Android应用程序崩溃

时间:2017-06-23 13:47:36

标签: java android

我有一个非常简单的应用程序。然而,在我按下按钮后,应用程序崩溃了。试图调试它,问题似乎是在onClick方法的前3行。一旦我尝试手动获取值,而不是通过这些编辑框,一切都顺利进行。有什么想法吗?

public class MainActivity extends AppCompatActivity {

    EditText editText_pocetKM;
    EditText editText_spotreba;
    EditText editText_cenaPHM;
    TextView textView_spotrebaO;
    TextView textView_cenaO;

    DecimalFormat df = new DecimalFormat("0.00##");

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

        editText_pocetKM = (EditText) findViewById(R.id.editText1_pocetKM);
        editText_spotreba = (EditText) findViewById(R.id.editText_Spotreba);
        editText_cenaPHM = (EditText) findViewById(R.id.editText1_cenaPHM);
        textView_spotrebaO = (TextView) findViewById(R.id.textView_spotrebaO);
        textView_cenaO = (TextView) findViewById(R.id.textView_cenaO);
    }

    public void onClick(View v) {
        Double pocetKm = Double.parseDouble(editText_pocetKM.getText().toString());
        Double spotreba = Double.parseDouble(editText_spotreba.getText().toString());
        Double cenaPHM = Double.parseDouble(editText_cenaPHM.getText().toString());

        Double spotrebaO = spotreba * pocetKm / 100;
        Double  cenaO = spotrebaO * cenaPHM;

        textView_cenaO.setText("Cena za spotřebované palivo bude "+ df.format(cenaO) + " Kč");
        textView_spotrebaO.setText("Celkem bude spotřebováno "+ df.format(spotrebaO) + " litrů paliva");
    }
}

1 个答案:

答案 0 :(得分:0)

您没有提供崩溃报告的logcat。如果提供了logcat,我们可以确定您的确切问题。但无论如何,当你通过删除onClick函数的前三行来消除崩溃时,我想你在EditText中设置了无效输入。

您正在解析在EditText中输入的文本加倍,如果输入不是有效的double字符串,则会失败。例如,当解析11.01时它会抛出异常时,它会解析Hello

因此,要检查应用程序是否因崩溃错误而崩溃,您可以考虑使用这样的try/catch块来围绕它们。

try {
    Double pocetKm = Double.parseDouble(editText_pocetKM.getText().toString());
    Double spotreba = Double.parseDouble(editText_spotreba.getText().toString());
    Double cenaPHM = Double.parseDouble(editText_cenaPHM.getText().toString());
} catch (Exception e) {
    e.printStackTrace();
    Toast.makeText(this, "Parsing error", Toast.LENGTH_LONG).show();
}