2015-09-13 51 views
0

所以基本上我有一個問題。當用戶按下計算按鈕(我正在製作計算器)而不輸入值時,應用程序崩潰。我希望它顯示一條消息,但我不知道如何。 (更新)如何在用戶未輸入值時停止程序崩潰?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.waist2height); { 
     //h is cm edittext 
     final EditText h = (EditText)findViewById(R.id.editText2); 
     final EditText w = (EditText)findViewById(R.id.editText3); 

     final EditText r = (EditText)findViewById(R.id.textView4); 

    }); 

     calculate.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 

      float height=0; 
      float weight=0; 
      float result=0; 



      result = (float) ((weight/height) + 0.005) ; 

      if ((h.getText().toString()).equals("")) 
       { 
        Toast.makeText(getApplicationContext(),"Please enter your height", Toast.LENGTH_SHORT).show(); 
        float height = Float.parseFloat(h.getText().toString()); 
       } 
       if ((w.getText().toString()).equals("")) 
       { 
        Toast.makeText(getApplicationContext(),"Please enter your weight", Toast.LENGTH_SHORT).show(); 
        float weight = Float.parseFloat(w.getText().toString()); 
       } 


      r.setText(String.valueOf(result)); 
      } 

下面的代碼是我有問題

if ((h.getText().toString()).equals("")) 
       { 
        Toast.makeText(getApplicationContext(),"Please enter your height", Toast.LENGTH_SHORT).show(); 
        float height = Float.parseFloat(h.getText().toString()); 
       } 
       if ((w.getText().toString()).equals("")) 
       { 
        Toast.makeText(getApplicationContext(),"Please enter your weight", Toast.LENGTH_SHORT).show(); 
        float weight = Float.parseFloat(w.getText().toString()); 
       } 

這是我能拿出最好的,但它不工作。

這裏是logcat的(更新)

09-20 18:50:38.509: E/AndroidRuntime(29769): FATAL EXCEPTION: main 
09-20 18:50:38.509: E/AndroidRuntime(29769): Process: com.NovaPlex.personalfitnessfree, PID: 29769 
09-20 18:50:38.509: E/AndroidRuntime(29769): java.lang.NumberFormatException: Invalid float: "" 
09-20 18:50:38.509: E/AndroidRuntime(29769): at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at java.lang.StringToReal.parseFloat(StringToReal.java:308) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at java.lang.Float.parseFloat(Float.java:306) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at com.NovaPlex.personalfitnessfree.WH$2.onClick(WH.java:80) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at android.view.View.performClick(View.java:4780) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at android.view.View$PerformClick.run(View.java:19866) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at android.os.Handler.handleCallback(Handler.java:739) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at android.os.Handler.dispatchMessage(Handler.java:95) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at android.os.Looper.loop(Looper.java:135) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at android.app.ActivityThread.main(ActivityThread.java:5254) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at java.lang.reflect.Method.invoke(Native Method) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at java.lang.reflect.Method.invoke(Method.java:372) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
09-20 18:50:38.509: E/AndroidRuntime(29769): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+0

請加計算器方法的完整代碼,和logcat的 – Moudiz

+0

使用'如果(!TextUtils.isEmpty(editText.getText()。的toString()){做某事}' – Raghunandan

+0

我已經添加了完整的代碼 – Ashraf96

回答

1

不要使用== null。假設你已經完成,它不能爲空。它不檢查內容。

這是一個簡單的方法,如何查找EditText是否爲空。參數是您要檢查的EditText,對於非空的/ false,它返回true

private boolean isEmpty(EditText etText) { 
    return etText.getText().toString().trim().length() <= 0; 
} 

編輯:

通過在XML文件中使用android:id="@+id/someId,我們告訴安卓與選上的ID(在這種情況下someId)在我們R.java類來創建新的資源。在做時,我們將該值賦給View。

總之,如果OP不喜歡的東西EditText EditText1 = (EditText) findViewById(R.id.myFistEditText);前,後來他嘗試將其在他的EditText他的文字的if(EditText1 == null),它沒有實際得到的值進行比較,它只是告訴他 - 是的,這個觀點之前發現並被分配。

+0

_ 「假設你已經完成了findviewbyid,它不能爲空」_...謹慎解釋? – Onik

+0

當然,請參閱我的編輯 – poss

+0

同樣,這個聲明可能不正確。在某些情況下,該方法可能返回null(請參見[findViewByID returns null](http://stackoverflow.com/questions/3264610/findviewbyid-returns-null))。因此,檢查它是否是空的不是多餘的。 – Onik

1

您可以試試這個,檢查是否沒有在EditText中輸入值。

if ((EditText1.getText().toString()).equals("")) 
{ 
    Toast.makeText(getApplicationContext(),"Please enter Value1", Toast.LENGTH_LONG).show(); 
} 
if ((EditText2.getText().toString()).equals("")) 
{ 
    Toast.makeText(getApplicationContext(),"Please enter Value2", Toast.LENGTH_LONG).show(); 
} 

或者,你可以使用.matches(""),而不是.equals("")

UPDATE

你必須做這樣

if (!(h.getText().toString()).equals("")) 
{ 
    height= Float.parseFloat(h.getText().toString()); 
} 

if (!(w.getText().toString()).equals("")) 
{ 
    weight= Float.parseFloat(w.getText().toString()); 
} 

UPDATE

if ((EditText1.getText().toString()).equals("")) 
{ 
    Toast.makeText(getApplicationContext(),"Please enter Value1", Toast.LENGTH_LONG).show(); 
} 
if ((EditText2.getText().toString()).equals("")) 
{ 
    Toast.makeText(getApplicationContext(),"Please enter Value2", Toast.LENGTH_LONG).show(); 
} 
if (!(h.getText().toString()).equals("")) 
{ 
    height= Float.parseFloat(h.getText().toString()); 
} 
if (!(w.getText().toString()).equals("")) 
{ 
    weight= Float.parseFloat(w.getText().toString()); 
} 

替換上面的代碼,而不是你的

+0

沒有工作意味着在Logcat中仍然有同樣的錯誤嗎?你可以發佈logcat嗎? – Lal

+0

對不起,我已經在LogCat中添加了 – Ashraf96

+0

請檢查我已編輯的答案.. – Lal

0

它已經說,你最好寫一個方法isEmpty

我的建議不是寫isEmpty寫一個方法isValid它檢查值是否是一個所需的值,即整數,雙等。

這樣,當輸入字符串時,程序不會崩潰。

相關問題