[英]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.