0

我的小費計算器只能在兩個文本字段我已經填補,我想有它顯示一條消息,然後從強制關閉保持應用程序...如果文本框爲空,結束方法?

這裏是我試過了java,但這是行不通的

package tip.calculator; 


import android.os.Bundle; 
import android.app.Activity; 
import android.text.TextUtils; 
import android.view.View.OnClickListener; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.view.View; 
import android.widget.Button; 




public class TipCalculator extends Activity 
{ 

private Button enter; 
EditText myEditField ; 
EditText myEditField2; 
float percentage = 0; 
float percentageInp = 0; 
float billAmount = 0; 
double output = 0; 
String output1 = ""; 
Button clearButton ; 
TextView textView; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myEditField = (EditText) findViewById(R.id.percentText); 
    enter = (Button)findViewById(R.id.button1); 
    myEditField2 = (EditText) findViewById(R.id.billText); 
    clearButton = (Button) findViewById(R.id.clearButton); 


    enter.setOnClickListener(new OnClickListener() { 


     public void onClick(View v) { 

      TextView errors; 
      textView = (TextView) findViewById(R.id.textView1); 
      errors = (TextView) findViewById(R.id.errorText);  



      if((myEditField2 != null) && (!TextUtils.isEmpty(myEditField2.getText().toString()))){ 


       percentageInp = Float.parseFloat(myEditField.getText().toString()); 
       billAmount = Float.parseFloat(myEditField2.getText().toString()); 

       percentage = ((float)percentageInp /100); 

       output = (double)(billAmount * percentage); 

       double result = output * 100; 
       result = Math.round(result); 
       result = result/100; 

       output1 = Double.toString(result); 

       textView.setText(output1 + " $"); 

      } else{ 
       //Toast.makeToast(.....).show(); //Inform user about the error 
      } 

     } 
    }); 

    clearButton.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0) { 

      percentage = 0; 
      output = 0; 
      output1 = ""; 

      TextView textView = (TextView)findViewById(R.id.errorText); 
      textView.setText(""); 

      TextView textView2 = (TextView)findViewById(R.id.percentText); 
      textView2.setText(""); 

      TextView textView3 = (TextView)findViewById(R.id.billText); 
      textView3.setText(""); 


      TextView textView1 = (TextView)findViewById(R.id.textView1); 
      textView1.setText(""); 


      percentageInp = 0; 
      billAmount = 0; 

      myEditField.clearComposingText(); 
      myEditField2.clearComposingText(); 

     } 


    }); 
} 
} 

這裏是堆棧跟蹤和更新Java是上述

08-01 21:24:17.824: E/AndroidRuntime(19302): FATAL EXCEPTION: main 
08-01 21:24:17.824: E/AndroidRuntime(19302): java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextView 
08-01 21:24:17.824: E/AndroidRuntime(19302): at tip.calculator.TipCalculator$1.onClick(TipCalculator.java:48) 
08-01 21:24:17.824: E/AndroidRuntime(19302): at android.view.View.performClick(View.java:3620) 
08-01 21:24:17.824: E/AndroidRuntime(19302): at android.view.View$PerformClick.run(View.java:14292) 
08-01 21:24:17.824: E/AndroidRuntime(19302): at android.os.Handler.handleCallback(Handler.java:605) 
08-01 21:24:17.824: E/AndroidRuntime(19302): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-01 21:24:17.824: E/AndroidRuntime(19302): at android.os.Looper.loop(Looper.java:137) 
08-01 21:24:17.824: E/AndroidRuntime(19302): at android.app.ActivityThread.main(ActivityThread.java:4507) 
08-01 21:24:17.824: E/AndroidRuntime(19302): at java.lang.reflect.Method.invokeNative(Native Method) 
08-01 21:24:17.824: E/AndroidRuntime(19302): at java.lang.reflect.Method.invoke(Method.java:511) 
08-01 21:24:17.824: E/AndroidRuntime(19302): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
08-01 21:24:17.824: E/AndroidRuntime(19302): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
08-01 21:24:17.824: E/AndroidRuntime(19302): at dalvik.system.NativeStart.main(Native Method) 

回答

1

檢查文本字段爲空不是問題。但是你一定要檢查空字符串的文本和null。 android.text.TextUtis.isEmpty()http://developer.android.com/reference/android/text/TextUtils.html#isEmpty(java.lang.CharSequence)在這種情況下很方便。你也必須確保輸入的字符串是一個浮點數。因此,您還必須嘗試捕獲任何解析錯誤,並將textfield的android:inputType屬性設置爲numberDecimal以確保輸入是浮點數。

這樣:

  1. 在你的佈局,增加財產android:inputType="numberDecimal",以確保您的用戶只能輸入有效的十進制數。
  2. 是否所有的安全檢查
 
    if((myEditField2 != null) && (!TextUtils.isEmpty(myEditField2.getText().toString()))){ 
     //use you data here 
    } else{ 
     Toast.makeToast(.....).show() //Inform user about the error 
    } 

如果你做1你可能不需要包圍Float.parseFloat(myEditField.getText().toString())用一個try-catch爲NumberFormatException

+0

這是一個有點混亂,你可以把它分解對我來說有一點 - 謝謝 – PrommeringsDisplay 2012-08-02 03:02:41

+0

我在if語句的()上遇到了錯誤...爲什麼會這樣? – PrommeringsDisplay 2012-08-02 04:03:22

+0

因爲它缺少一個)。我會編輯我的帖子 – 2012-08-02 04:14:36

0

如果你想檢查在編輯文本該字符串不爲空,你可以使用:

if(et.getText().toString() != null){ 

}