0

在我的项目中,我有一个至少计算 2 个 EditBox 的按钮,但是当我将其留空并计算时,我得到了崩溃应用程序:

java.lang.NumberFormatException: Invalid double: ""
at java.lang.StringToReal.invalidReal(StringToReal.java:63)
at java.lang.StringToReal.parseDouble(StringToReal.java:248)
at java.lang.Double.parseDouble(Double.java:295)
at com.math.square.Level1.calculate(Level1.java:71)
at com.math.square.Level1.access$0(Level1.java:66)
at com.math.square.Level1$2.onClick(Level1.java:62)
at android.view.View.performClick(View.java:3511)
at android.view.View$PerformClick.run(View.java:14105)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)

在计算之前我可以做些什么来检查,如果它是空的,提醒用户并且不要计算?

编码:

public class Level1 extends Activity {
    EditText amount1;
    EditText amount2;
    EditText amount3;
    EditText amount4;
    Button calculate;
    double a=0;
    double b=0;
    double c=0;
    double d=0;
    double e=0;
    double f=0;
    double g=0;
    double h=0;

    /** Called when the activity is first created. */
    @Override
      public void onCreate(Bundle savedInstanceState)
      {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.level1);

          initControls();

        findViewById(R.id.Button05).setOnClickListener(
                new OnClickListener() {
            public void onClick(View v) {
                btn05(true);
            }
        });;
      }

          private void initControls()
          {
              amount1=(EditText)findViewById(R.id.amount1);
              amount2=(EditText)findViewById(R.id.amount2);
              amount3=(EditText)findViewById(R.id.amount3);
              amount4=(EditText)findViewById(R.id.amount4);
              calculate=(Button)findViewById(R.id.calculate);
              calculate.setOnClickListener(new Button.OnClickListener()
              {
                  public void onClick
              (View  v) { calculate();}
              });
          }

        private void calculate()
          {
              a=Double.parseDouble(amount1.getText().toString());
              b=Double.parseDouble(amount2.getText().toString());
              d=Double.parseDouble(amount3.getText().toString());
              e=Double.parseDouble(amount4.getText().toString());

              /** Check Value > 0*/
              EditText amount1value = (EditText)this.findViewById(R.id.amount1);
              EditText amount2value = (EditText)this.findViewById(R.id.amount2);
              EditText amount3value = (EditText)this.findViewById(R.id.amount3);
              EditText amount4value = (EditText)this.findViewById(R.id.amount4);
              Integer nameLen = 2;

              int len = amount1value.length();
              int len2 = amount2value.length();
              int len3 = amount3value.length();
              int len4 = amount4value.length();

              if (len<nameLen) {
                  amount1value.setError(getText(R.string.blank));
                  TextView Result = (TextView)findViewById(R.id.Result);
                  Result.setText(R.string.error_character_length);
              } else 
              if (len2<nameLen) {
                  amount2value.setError(getText(R.string.blank));
                  TextView Result = (TextView)findViewById(R.id.Result);
                  Result.setText(R.string.error_character_length);
              } else 
              if (len3<nameLen) {
                  amount3value.setError(getText(R.string.blank));
                  TextView Result = (TextView)findViewById(R.id.Result);
                  Result.setText(R.string.error_character_length);
              } else 
              if (len4<nameLen) {
                  amount4value.setError(getText(R.string.blank));
                  TextView Result = (TextView)findViewById(R.id.Result);
                  Result.setText(R.string.error_character_length);
              }  

              else {

              c=a+b;
              f=d+e;
              g=a+d;
              h=b+e;

              if(c==9 && f==12 && g==8 && h==13){
                TextView Result = (TextView)findViewById(R.id.Result);
                Result.setText(R.string.correct);
              }
              else {
                TextView Result = (TextView)findViewById(R.id.Result);
                Result.setText(R.string.wrong);
              }
              }
          }

我创建了一个检查以查看是否有 2 个字符来避免用户出现空白,但这只是一种解决方法。

4

2 回答 2

1

答案要简单得多。在运行计算之前,只需检查 EditText 之前的文本。如果它为空,则显示错误 toast。否则继续计算。要注意的另一件事是您的 EditText 应该只接受数字作为输入类型。无需尝试捕获。有关详细信息,请查看开发站点上的 EditText 文档。

于 2012-04-24T21:50:58.193 回答
0

围绕你的parseDouble方法try-catch,抓住NumberFormatException。如果发生异常,请通知用户他们输入了无效值并且不要继续计算。

于 2012-04-24T21:18:17.163 回答