【问题标题】:How can I make sure that edittext field is not null?如何确保 edittext 字段不为空?
【发布时间】:2012-09-20 01:59:16
【问题描述】:

我有 2 个编辑文本字段,其中需要项目名称(字符串)和数量(整数)。如果用户在两个字段中都没有输入任何内容,或者即使只有一个字段为空,我想显示一个祝酒词“请输入项目”或“请输入数量”。它创造和错误。这是下面的sn-p:

 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)

【问题讨论】:

    标签: android android-edittext toast


    【解决方案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”),这仍然会崩溃,但它应该能够处理任何输入的内容。

    【讨论】:

    • +1 表示干净的代码,但数量 = Integer.parseInt("a");会使代码崩溃:) 以及为什么 Integer.parseInt(quantityString);在 if(quantityString.equals("")) 上? :)
    • 哎呀搞混了,太习惯于编写检查 not 是否为空字符串:P 现在将修复它
    • @ Xono,我确实使用了 Lucifer 的第一个代码,他声明数量 = 0;如果没有输入任何内容,这使我的应用程序将整数默认设置为 0。他删除了那个答案。但对我来说已经足够好的答案了。但是在检查你的代码时,它会好得多,因为它确实显示了我想要的祝酒词。但它会自动从警报对话框中出来。无论如何,当警报对话框仍然存在时,这些 toast 会显示吗?
    • 如果您在onClick 方法中使用对dismiss() 的调用,只需在读取t.show() 的两行之后放置return 调用(但仍在if 语句中) .如果您在其他地方有dismiss() 电话,请发布调用它的代码。如果您根本没有dismiss() 方法,请告诉我:P
    • @Xono 我没有dismiss();
    【解决方案2】:

    注意你可以使用 setError("error");

    【讨论】:

      【解决方案3】:

      以上2个答案都不好,因为:

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

      这里你应该检查item,如果你愿意的话,但不在这条线上是崩溃的。

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

      这就是问题所在,因为quantityET 有一个空字符串并且没有被检查。

      有两种解决方案: 一种是检查quantityET.getText() 不为空且长度> 0 第二个是为Integer.parseInt(value) 放置 Try-catch

      我会结合 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);
         }
      }
      

      希望对你有帮助。

      【讨论】:

        【解决方案4】:

        在创建 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();
                }
            }
        

        【讨论】:

        • 非常有帮助的答案.. 现在可以使用了.. 非常感谢!
        • 注意:他描述的崩溃是由于在空字符串''上调用parseInt引起的。 int quantity = ... 行应该是 inside 第二个 if 语句以解决崩溃问题。另外,第一个 if 语句不能只做 item.trim().equals("") 的任何原因?
        • @Xono,如果您阅读了我的答案代码,请同意我在将字符串转换为整数时使用了 trim() 方法。
        • trim() 如何防止崩溃尝试解析空字符串?
        • 不,它不是:如果 (quantityET != null ) 它永远不会为空,因为它是一个 int,而不是一个对象,troooll
        【解决方案5】:

        试试这样的:

        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();
        }
        

        【讨论】:

          【解决方案6】:
                  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();
              }
          

          【讨论】:

          • 为什么 OP 应该“试试这个”? 好的答案将始终解释所做的事情以及这样做的原因,不仅适用于 OP,而且适用于可能会发现此问题并正在阅读您的答案的 SO 的未来访问者。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-11
          • 2020-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多