2016-03-06 64 views
-3
badd.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      String s1 = e1.getText()+"hi".toString(); 
      Log.i("add",s1); 
      if(e1.getText()==null) 
      { 
       Toast.makeText(getApplicationContext(), "Please Enter A Number First", Toast.LENGTH_SHORT).show(); 
      } 
      else 
      { 
       num1 = Float.parseFloat(e1.getText()+""); 
       i=1; 
       e1.setText(null); 
      } 
     } 
    }); 

我正在製作一個簡單的計算器應用程序,其中有一個Button badd(用於執行添加的按鈕)和一個EditText e1。點擊此按鈕時;首先會檢查文本框是否爲空或者是否爲空,它將顯示一個Toast告訴用戶輸入一個數字。如果已經輸入了該號碼,該號碼將被存儲在變量num1中,並且文本框將變爲空,以便用戶可以輸入另一個號碼並且將在這兩個號碼上執行添加。由於運行時錯誤而無法顯示Toast

當我輸入一個數字,並按下badd添加成功完成。但我的問題是,當我離開編輯文本框爲空(空)我得到一個運行時錯誤,而不是顯示吐司它顯示錯誤「您的應用程序不幸關閉」。

我創建了一個字符串變量S1也是發生在E1輸入的字符串和concate與另一串「喜」這個字符串因此,如果字符串是空的,它會至少顯示日誌貓一喜消息。它是檢查匿名內部類是否有錯誤。但它清除了沒有問題的匿名內部類和其他塊。

我認爲這個錯誤在if塊中。請幫幫我!以下是我的LogCat錯誤,這將幫助您找到錯誤。

03-05 16:37:00.601: I/add(1569): hi 

03-05 16:37:00.663: E/AndroidRuntime(1569): FATAL EXCEPTION: main 

03-05 16:37:00.663: E/AndroidRuntime(1569): java.lang.NumberFormatException: Invalid float: "" 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at java.lang.StringToReal.invalidReal(StringToReal.java:63) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at java.lang.StringToReal.parseFloat(StringToReal.java:289) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at java.lang.Float.parseFloat(Float.java:300) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at com.example.mycalculator.MainActivity$13.onClick(MainActivity.java:171) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at android.view.View.performClick(View.java:4202) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at android.view.View$PerformClick.run(View.java:17340) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at android.os.Handler.handleCallback(Handler.java:725) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at android.os.Handler.dispatchMessage(Handler.java:92) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at android.os.Looper.loop(Looper.java:137) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at android.app.ActivityThread.main(ActivityThread.java:5039) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at java.lang.reflect.Method.invokeNative(Native Method) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at java.lang.reflect.Method.invoke(Method.java:511) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 

03-05 16:37:00.663: E/AndroidRuntime(1569):  at dalvik.system.NativeStart.main(Native Method) 
+1

問題所以,你應該通過捕獲該異常並做別的事情,而不是處理這種情況在這裏'String s1 = e1.getText()+「hi」.toString();''hi'不能解析float.It'string'不是一個值 –

+0

這行正常執行,即使我評論這個線我得到相同的錯誤。這條線沒有錯誤 –

+0

logcat完全告訴你**問題是什麼:'NumberFormatException:無效的float:「''' –

回答

1

按照javadoc for parseFloat,它可以拋出NumberFormatException如果該字符串不能解釋爲一個浮點數。

try { 
    num1 = Float.parseFloat(e1.getText()+""); 
} catch (NumberFormatException e) { 
    // do something else 
} 
+0

其他塊工作正常,如果塊存在錯誤。 –

+0

崩潰在else塊中 - 'java.lang.NumberFormatException:無效的float:「」'。這是因爲'e1.getText()'返回一個空字符串,而不是'null',所以if條件總是會失敗 – panini

+0

我應該在if塊中寫什麼呢? –

0

試試這個您如果塊:

if(e1.getText().toString().equals("")) 

希望這將幫助你.. :)

相關問題