私のプロジェクトには、少なくとも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文字あるかどうかを確認するためのチェックを作成しましたが、これは単なる回避策です。