【问题标题】:Error Trapping Error错误捕获错误
【发布时间】:2013-03-15 02:11:14
【问题描述】:

试图捕获空或 0 输入。如果输入空值,应用程序崩溃,如果输入 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)"

【问题讨论】:

    标签: android error-handling


    【解决方案1】:

    您应该在检查值之前检查 Null。否则,当它检查 0 并且值为 Null 时,它将抛出异常。

    【讨论】:

      【解决方案2】:

      这种方法将允许您输入无效的字符串(字母)并且不会崩溃(您的意愿不变)。此外,由于您将 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");
      }
      

      【讨论】:

      • 另外,我不相信你会在 EditText 上从 getText().toString() 获得 null 。如果字段返回一个空的非 null 字符串 ( "" )是空白
      • 感谢您的帮助,不仅是代码,还有助于理解“WHY”。
      • 如果您认为这是最好的解决方案,请将其标记为答案 :)
      猜你喜欢
      • 2017-06-14
      • 2023-03-28
      • 2011-06-18
      • 1970-01-01
      • 2021-02-01
      • 2012-06-16
      • 2016-10-02
      • 2016-03-09
      • 1970-01-01
      相关资源
      最近更新 更多