【问题标题】:App crashes with click on button with empty editText单击带有空editText的按钮时应用程序崩溃
【发布时间】:2011-10-21 05:29:49
【问题描述】:
btnNadoplata.setOnClickListener(new View.OnClickListener()

        {
            public void onClick(View v) 
            {   
                long inputValue1 = Long.parseLong(text1.getText().toString());
                String encodedHash = Uri.encode("#");

                if (text1.getText().length() == 14 ) {

                    startActivity(new Intent("android.intent.action.CALL", Uri.parse("tel:*123*" + inputValue1 + encodedHash)));
                }else {

                    Toast.makeText(bonbon.this, "Krivi kod. Unesi 14-znamenkasti kod sa bona!", Toast.LENGTH_SHORT).show();

                    }
            }
        });

我有一个editText,用户需要输入一个14位数字。如果数字小于或大于 14 位,当用户单击按钮时,他会收到说输入不好的消息。问题是当 editText 为空时,用户单击按钮,应用程序崩溃。我怎样才能改变这个,所以如果editText为空,用户会从上面的代码部分得到消息??

对不起,我的英语不好。

【问题讨论】:

  • 你能发布堆栈跟踪吗?
  • 你检查是否 text1 !=null ?

标签: android crash android-edittext


【解决方案1】:
objText = (EditText)findViewById(R.id.txtPurchasePrice);
String strPurchasePrice = objText.getText().toString();   
objText = (EditText)findViewById(R.id.txtSalePrice);
String strSalePrice = objText.getText().toString();
objText = (EditText)findViewById(R.id.txtShares);
String strShares = objText.getText().toString();

if(strPurchasePrice.trim().equals("") && strSalePrice.trim().equals("") && strShares.trim().equals("")) {      
   Toast.makeText(getApplicationContext(), "Please insert the Values..", 10000).show();
}

【讨论】:

    【解决方案2】:

    您应该在解析之前测试您的输入长度。解析崩溃。

     public void onClick(View v) 
     { 
         if( text1.getText().length() <14 )
         {
            Toast.makeText(bonbon.this, "Krivi kod. Unesi 14-znamenkasti kod sa bona!", Toast.LENGTH_SHORT).show();
            return;
         }//if
    
         long inputValue1 = Long.parseLong(text1.getText().toString());
         String encodedHash = Uri.encode("#");
         startActivity(new Intent("android.intent.action.CALL", Uri.parse("tel:*123*" + inputValue1 + encodedHash)));
     }//met
    

    另一种方法是用 try/catch/block 包围解析,但它比这个简单的测试效率低,但如果用户键入非数字则更健壮。

    问候, 斯蒂芬

    【讨论】:

      【解决方案3】:

      它可能会在这一行崩溃:

      long inputValue1 = Long.parseLong(text1.getText().toString());
      

      实际上,如果您的 EditText text1 中有一个空字符串,则函数 parseLong() 将抛出 NumberFormatException 异常。

      您应该在继续之前测试text1 文本的值:

      public void onClick(View v) 
      {   
          if (text1.getText().toString().compareTo("") == 0)
          {
              long inputValue1 = Long.parseLong(text1.getText().toString());
              String encodedHash = Uri.encode("#");
              ...
      

      或者你可以添加try/catch指令来捕获Long.parseLong()抛出的异常。

      public void onClick(View v) 
      {   
          try
          {
              long inputValue1 = Long.parseLong(text1.getText().toString());
              String encodedHash = Uri.encode("#");
              ...
          }
          catch (NumberFormatException nfe)
          {
              ...
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-01
        • 1970-01-01
        • 2014-07-24
        • 2017-07-01
        相关资源
        最近更新 更多