应用程序崩溃时单击带有空editText的按钮

时间:2011-08-05 21:32:09

标签: android crash android-edittext

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位数字。如果number小于或大于14位,当用户clikc on按钮时,他会收到输入不好的消息。问题是当editText为空时,用户点击按钮,应用程序崩溃。我怎么能改变这个,所以如果editText为空,用户从上面的代码部分获取消息??

Sory因为我的英语不好。

3 个答案:

答案 0 :(得分:1)

这行可能会崩溃:

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)
    {
        ...
    }

答案 1 :(得分:1)

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

 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来解析,但它的效率低于这个简单的测试,但如果用户输入非数字,则会更加健壮。

此致  斯特凡

答案 2 :(得分:0)

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