0

null または 0 の入力をキャッチしようとしています。null を入力するとアプリがクラッシュし、0 を入力するとエラーを通過して奇妙な演算を返します。

case_cost = (EditText) findViewById(R.id.case_cost);
dilution = (EditText) findViewById(R.id.dilution);
answer =(TextView) findViewById(R.id.answer);
ounces_pc = (TextView) findViewById(R.id.ounces_pc);

Button finishBtn = (Button) findViewById(R.id.button3);
finishBtn.setOnClickListener (new View.OnClickListener() {
    @Override
        public void onClick(View v) {
        // TODO Method 
        if (((Float.valueOf(dilution.getText().toString())) == 0) ||   
                         (dilution.getText().equals(null)))   {

    String errMsg = "Missing Dilution";
        answer.setText(errMsg);

    }   else;

デバッグ情報:

StringToReal.invalidReal(String, boolean) line: 63  
StringToReal.parseFloat(String) line: 289   
Float.parseFloat(String) line: 300  
Float.valueOf(String) line: 337 
UccActivity$1.onClick(View) line: 47    
Button(View).performClick() line: 4102  
View$PerformClick.run() line: 17063 
Handler.handleCallback(Message) line: 615   
ViewRootImpl$ViewRootHandler(Handler).dispatchMessage(Message) line: 92 
Looper.loop() line: 155 
ActivityThread.main(String[]) line: 5454    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not   
available [native method]   
Method.invoke(Object, Object...) line: 511  
ZygoteInit$MethodAndArgsCaller.run() line: 1029 
ZygoteInit.main(String[]) line: 796 
NativeStart.main(String[]) line: not available [native method]  
Thread [<10> Binder_2] (Running)    
Thread [<9> Binder_1] (Running)"
4

2 に答える 2

0

値をチェックする前に、Nullをチェックする必要があります。それ以外の場合、0をチェックし、値がNullの場合、例外がスローされます。

于 2013-03-15T02:26:33.170 に答える
0

このアプローチにより、無効な文字列 (文字) を入力でき、クラッシュすることはありません (あなたのものはそのままです)。さらに、int と float を比較しているため、0 チェックは機能しません。0f を使用する必要があります。

String text = dilution.getText().toString();
if (TextUtils.isEmpty(text)) {
  answer.setText("Empty input");
  return;
}

try {
    Float value = Float.valueOf(text);

    if (value == null || value == 0f) {
        answer.setText("Zero");
    }
} catch (NumberFormatException e) {
    answer.setText("Invalid input");
}
于 2013-03-15T03:33:58.527 に答える