2012-09-20 36 views
0

我有2個edittext字段,它需要項目名稱(字符串)和數量(整數)。如果用戶在兩個字段中都沒有輸入任何內容,或者即使只有一個字段爲空,我想顯示「請輸入項目」或「請輸入數量」的敬酒。它創建並出錯。這是下面的代碼片段:如何確保edittext字段不爲空?

public void onClick(DialogInterface dialog, int id) { 

         String item = itemET.getText().toString(); 
         int quantity = Integer.parseInt(quantityET.getText().toString()); 
         if(itemET.equals("")){ 
          Toast t =Toast.makeText(GroceryList.this, "Please enter item", 5000); 
          t.show(); 
          } 
          if(quantityET.equals("")){ 
          Toast t =Toast.makeText(GroceryList.this, "Please enter quantity or enter 0 if none", 5000); 
          t.show(); 
          } 

,這裏是在logcat的錯誤:

09-19 10:01:51.766: E/AndroidRuntime(527): FATAL EXCEPTION: main 
09-19 10:01:51.766: E/AndroidRuntime(527): java.lang.NumberFormatException: unable to parse '' as integer 
09-19 10:01:51.766: E/AndroidRuntime(527): at java.lang.Integer.parseInt(Integer.java:362) 
09-19 10:01:51.766: E/AndroidRuntime(527): at java.lang.Integer.parseInt(Integer.java:332) 
09-19 10:01:51.766: E/AndroidRuntime(527): at com.mexican.recipes.GroceryList$1$1.onClick(GroceryList.java:60) 
09-19 10:01:51.766: E/AndroidRuntime(527): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159) 
09-19 10:01:51.766: E/AndroidRuntime(527): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-19 10:01:51.766: E/AndroidRuntime(527):  at android.os.Looper.loop(Looper.java:123) 
09-19 10:01:51.766: E/AndroidRuntime(527):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
09-19 10:01:51.766: E/AndroidRuntime(527):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-19 10:01:51.766: E/AndroidRuntime(527):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-19 10:01:51.766: E/AndroidRuntime(527):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-19 10:01:51.766: E/AndroidRuntime(527):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-19 10:01:51.766: E/AndroidRuntime(527):  at dalvik.system.NativeStart.main(Native Method) 

回答

1

這段代碼有兩個問題:在一個空字符串上調用parseInt會引發一個異常(你看到的錯誤),並且你正在對EditText對象本身做一個.equals比較,而不是包含在裏面的字符串。執行以下操作:

public void onClick(DialogInterface dialog, int id) { 

    String itemString = itemET.getText().toString(); 
    String quantityString = quantityET.getText().toString(); 
    int quantity; 

    if(itemString.equals("")) 
    { 
     Toast t =Toast.makeText(GroceryList.this, "Please enter item", 5000); 
     t.show(); 
    } 

    if(quantityString.equals("")){ 
     Toast t =Toast.makeText(GroceryList.this, "Please enter quantity or enter 0 if none", 5000); 
     t.show(); 
    } 
    else { 
     quantity = Integer.parseInt(quantityString); 
    } 
} 

這仍然會崩潰,如果你提供的東西是不是數字(例如,如果你輸入「A」成箱),但它應該能夠處理什麼正在進入。

+2

+1代碼乾淨,但數量= Integer.parseInt(「a」);會崩潰的代碼:)爲什麼Integer.parseInt(quantityString);在if(quantityString.equals(「」))? :) – 2012-09-20 02:48:41

+0

哎呀混淆起來,也習慣於寫檢查*不*是一個空字符串:P現在將修復它 – Xono

+1

@ Xono,我確實使用了Lucifer的第一個代碼,他聲明quantity = 0;這使得我的應用程序設置整數默認爲0,如果沒有輸入。他刪除了這個答案。但對我來說足夠好。但是在檢查你的代碼後,它會更好,因爲它顯示了我想要的敬酒。但它會自動從alertdialog中出來。無論如何,當alertdialog仍在那裏時,這些吐司會顯示? – omi0301

0

在創建您的EditText聲明android:inputType="number"屬性初始化只接受數值。

public void onClick(DialogInterface dialog, int id) 
    { 
       String item; 
       int quantity; 
       if (itemET != null) 
       { 
        item = itemET.getText().toString(); 
       } 

       if (quantityET != null && quantityET.getText().toString().trim().length() > 0) 
       { 
        quantity = Integer.parseInt(quantityET.getText().toString().trim()); // trim() method added when converting String to Integer 
       } 
     if(itemET.getText().trim().equals("")) // Modification done here 
     { 
      Toast t =Toast.makeText(GroceryList.this, "Please enter item", 5000); 
      t.show(); 
     } 
     if(quantityET.getText().trim().equals("")) // Modification done here 
     { 
      Toast t =Toast.makeText(GroceryList.this, "Please enter quantity or enter 0 if none", 5000); 
      t.show(); 
     } 
    } 
+0

非常有用的答案..得到它現在的工作。謝謝你這麼多! – omi0301

+0

@ omi0301,歡迎:) – Lucifer

+0

關於此問題的一個注意事項:他描述的崩潰是由對空字符串''''調用'parseInt'造成的。爲了解決崩潰,'int quantity = ...'行應該放在第二個if語句中。此外,第一個if語句不能僅僅執行'item.trim()。equals(「」)'的任何原因? – Xono

0

上述2個答案都不是很好,這是因爲:

String item = itemET.getText().toString(); 

在這裏,你應該檢查item,如果你想要的,但不是在這條線是死機。

int quantity = Integer.parseInt(quantityET.getText().toString()); 

這裏的問題是,因爲quantityET有一個空字符串,它不檢查。

有2溶液: 一是檢查quantityET.getText()是NOT NULL和長度> 0 ,第二個是把在try-catch爲Integer.parseInt(value)

我將結合2:

String quantity = quantityET.getText().toString(); 
if(quantity != null && quantity.length() > 0){ 
    try{ 
    int iQuantity = Integer.parseInt(quantityET.getText().toString()); 
    }catch(NumberFormatException nfe){ 
     Log.e("your tag", e); 
    } 
} 

希望它有幫助。

0

嘗試是這樣的:

public void onClick(DialogInterface dialog, int id) { 
    int quantity; 
    String item; 
    if(itemET.getTExt.toString().trim()!="") { 
     item = itemET.getText().toString(); 
    } else { 
     Toast t =Toast.makeText(GroceryList.this, "Please enter item", 5000); 
     t.show(); 
    } 

    if(quantityET.getText().toString().trim()!="") { 
     quantity = Integer.parseInt(quantityET.getText().toString().trim()); 
    } else { 
     Toast t =Toast.makeText(GroceryList.this, "Please enter quantity or enter 0 if none", 5000); 
     t.show(); 
} 
1

注意,你可以使用SETERROR( 「錯誤」);

0
 if(editText.getText().toString().length()==0) 
     Toast.makeText(Registration.this, "Plz Enter Your name", Toast.LENGTH_LONG).show(); 

    else if (editText1.getText().toString().length() == 0) 
     Toast.makeText(Registration.this, "plz enter mobile no.", Toast.LENGTH_LONG).show(); 
    else { 
     Intent i = new Intent(getApplicationContext(), MainActivity.class); 
     startActivity(i); 
     finish(); 
    } 
+2

爲什麼要OP「試試這個」?一個**好的答案**將總是解釋做了什麼以及爲什麼這樣做,不僅是爲了OP,而且是爲了將來訪問SO的人可能會發現這個問題並且正在閱讀你的答案。 –

相關問題