簡體   English   中英

由於某種原因,這崩潰了,我不知道為什么

[英]For some reason this is crashing and I have no idea why

我正在Android Studio中進行溫度換算,但是當我在任何EditText上輸入數字並按下計算按鈕時,它會崩潰,我也不知道為什么。

這是MainActivity.java代碼:


    private ViewHolder mViewHolder = new ViewHolder();

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

        this.mViewHolder.editValueCel = findViewById(R.id.edit_value_cel);
        this.mViewHolder.editValueFahr = findViewById(R.id.edit_value_fahr);
        this.mViewHolder.editValueKelvin = findViewById(R.id.edit_value_kelvin);
        this.mViewHolder.buttonCalculate = findViewById(R.id.button_calculate);
        this.mViewHolder.textCelsius = findViewById(R.id.tot_celcius);
        this.mViewHolder.textFahr = findViewById(R.id.tot_fahr);
        this.mViewHolder.textKelvin = findViewById(R.id.tot_kelvin);

        this.mViewHolder.buttonCalculate.setOnClickListener(this);


    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.button_calculate){

            String valorCel = this.mViewHolder.editValueCel.getText().toString();
            String valorFahr = this.mViewHolder.editValueFahr.getText().toString();
            String valorKelvin = this.mViewHolder.editValueKelvin.getText().toString();

            if (("".equals(valorCel)) && ("".equals(valorFahr)) && ("".equals(valorKelvin))){

                Toast.makeText(this, this.getString(R.string.informe_valor), Toast.LENGTH_SHORT).show();

            }else {

                Double celsius = Double.valueOf(valorCel);
                Double fahr = Double.valueOf(valorFahr);
                Double kelvin = Double.valueOf(valorKelvin);

                if (("".equals(valorFahr)) && ("".equals(valorKelvin))){

                    this.mViewHolder.textCelsius.setText(String.valueOf(celsius));
                    this.mViewHolder.textFahr.setText(String.valueOf((9*celsius+160)/5));
                    this.mViewHolder.textKelvin.setText(String.valueOf(celsius+273));

                }else if(("".equals(valorCel)) && ("".equals(valorKelvin))){

                    this.mViewHolder.textCelsius.setText(String.valueOf(((fahr-32)/9)*5));
                    this.mViewHolder.textFahr.setText(String.valueOf(fahr));
                    this.mViewHolder.textKelvin.setText(String.valueOf((5*fahr+2297)/9));

                }else if(("".equals(valorCel)) && ("".equals(valorFahr))){

                    this.mViewHolder.textCelsius.setText(String.valueOf(kelvin-273));
                    this.mViewHolder.textFahr.setText(String.valueOf((9*kelvin-2297)/5));
                    this.mViewHolder.textKelvin.setText(String.valueOf(kelvin));

                }else{

                    Toast.makeText(this, this.getString(R.string.erro_muitos_valores), Toast.LENGTH_SHORT).show();

                }

            }
        }
    }

    private static class ViewHolder{
        EditText editValueCel;
        EditText editValueFahr;
        EditText editValueKelvin;
        TextView textCelsius;
        TextView textFahr;
        TextView textKelvin;
        Button buttonCalculate;

    }
}

如果需要在此處發布activity_main.xml代碼,請告訴我,我將其發布。

您首先將字符串轉換為雙精度

Double celsius = Double.valueOf(valorCel);
Double fahr = Double.valueOf(valorFahr);
Double kelvin = Double.valueOf(valorKelvin);

但是從后面的代碼判斷,一個或多個字符串很可能為空,這會導致NumberFormatException (或者為null會導致NullPointerException ),因此您需要將轉換移至if / else條件之一內。

使用isEmpty()比比較字符串是否等於“”

if (valorFahr.isEmpty() && valorKelvin.isEmpty()){
    Double celsius = Double.valueOf(valorCel);
    this.mViewHolder.textCelsius.setText(String.valueOf(celsius));
    this.mViewHolder.textFahr.setText(String.valueOf((9*celsius+160)/5));
    this.mViewHolder.textKelvin.setText(String.valueOf(celsius+273));
} else if(valorCel.isEmpty() && valorKelvin.isEmpty()){
    Double fahr = Double.valueOf(valorFahr);
    this.mViewHolder.textCelsius.setText(String.valueOf(((fahr-32)/9)*5));
    this.mViewHolder.textFahr.setText(String.valueOf(fahr));
    this.mViewHolder.textKelvin.setText(String.valueOf((5*fahr+2297)/9));
} else if(valorCel.isEmpty() && valorFahr.isEmpty()){
    Double kelvin = Double.valueOf(valorKelvin);
    this.mViewHolder.textCelsius.setText(String.valueOf(kelvin-273));
    this.mViewHolder.textFahr.setText(String.valueOf((9*kelvin-2297)/5));
    this.mViewHolder.textKelvin.setText(String.valueOf(kelvin));
...

不知道應用程序其余部分的工作方式,作為此代碼的一部分,檢查並非所有3個字符串都為空或它們中的任何一個為null仍然是一件好事。

所以也許在if / else部分之前

if ((valorFahr == null || valorKelvin == null || valorCel == null) ||
    (valorFahr.isEmpty() && valorKelvin.isEmpty() && valorCel.isEmpty())) {
    //some error handling
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM