0

アイテム名(文字列)と数量(整数)が必要な2つの編集テキストフィールドがあります。ユーザーが両方のフィールドに何も入力しない場合、または1つのフィールドだけが空の場合は、「アイテムを入力してください」または「数量を入力してください」というトーストを表示したいと思います。作成してエラーが発生します。以下にスニペットを示します。

 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)
4

6 に答える 6

1

このコードには2つの別個の問題があります。空の文字列で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」と入力した場合)、これは引き続きクラッシュしますが、入力されたものは何も処理できないはずです。

于 2012-09-20T02:42:47.793 に答える
1

setError( "error");を使用できることに注意してください。

于 2013-01-03T14:45:31.247 に答える
0

EditTextの作成中に、android:inputType="number"数値のみを受け入れるようにプロパティinitを宣言します。

    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();
        }
    }
于 2012-09-20T02:03:52.267 に答える
0

上記の2つの答えはどれも適切ではありません。理由は次のとおりです。

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

ここで、必要itemに応じてを確認する必要がありますが、この行ではクラッシュは発生しません。

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

quantityET空の文字列があり、チェックされていないため、ここに問題があります。

quantityET.getText()2つの解決策があります。1つはnullではなく長さが0より大きいことを確認することであり、もう1つは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);
   }
}

それが役に立てば幸い。

于 2012-09-20T02:12:32.583 に答える
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();
}
于 2012-09-20T02:48:22.210 に答える
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();
    }
于 2016-07-27T10:28:31.623 に答える