验证多个EditTexts

时间:2013-06-12 22:09:22

标签: android

整晚被困在这里,似乎没有一个简单的解决方案。我正在尝试验证所有4个字段,以确保每个字段都有一个值,如果在单击“计算”按钮后每个字段中都有一个值,则计算总计。如果它们中的任何一个没有值,它将在每个没有值的EditText返回错误,并且不会计算总数。

cal.setOnClickListener(new View.OnClickListener()
        {

            @Override
            public void onClick(View v) 
            {
                // TODO Auto-generated method stub  
                if( eLoan.getText().toString().length() == 0 )
                {
                    eLoan.setError( "A value is required" );
                }
                else if( eWage.getText().toString().length() == 0 )
                {
                    eWage.setError( "A value is required" );
                }
                else if( eGrant.getText().toString().length() == 0 )
                {
                    eGrant.setError( "A value is required" );
                }
                else if( eOther.getText().toString().length() == 0 )
                {
                    eOther.setError( "A value is required" );
                }
                else
                convertToString();
                converToDouble();               
                inTotal = inLoan + inWage + inGrant + inOther;
                DecimalFormat currency = new DecimalFormat(".00");
                TotalInNum.setText("£" + currency.format(inTotal));
            }

        });

我无法理解它,我已经尝试合并一个布尔语句来检查每个EditText,但它也不起作用。我相信有一种更简单的方法可以做到这一点。

我对android非常陌生,自学自我,所以如果人们可以告诉我我做错了什么并且可能给我一个我应该做的例子,我会很感激。

感谢所有回复的人。

4 个答案:

答案 0 :(得分:4)

只是建立在别人的话语基础之上。你可以这样做......

创建一个循环遍历EditTexts的验证方法,检查它们是否为空,如果设置为true,则返回true或false ...

public boolean validateEditText(int[] ids)
{
    boolean isEmpty = false;

    for(int id: ids)
    {
        EditText et = (EditText)findViewById(id);

        if(TextUtils.isEmpty(et.getText().toString()))
        {
            et.setError("Must enter Value");
            isEmpty = true;
        }
    }

    return isEmpty;
}

列出EditText id' s ..

int[] ids = new int[]
{
    R.id.section1_item1_textfield,
    R.id.section1_item2_textfield,
    R.id.section1_item3_textfield
};

现在使用验证方法检查是否为空......

if(!validateEditText(ids)) 
{
    //if not empty do something
}else{
    //if empty do somethingelse
}

要使用上述方法,您需要...

import android.text.TextUtils;

这样做的好处是,您可以简单地将所有EditText放入列表中,然后为您完成剩下的工作。维护大量的if语句可能很烦人且耗时。

答案 1 :(得分:3)

我认为问题是你在逻辑所在的最后else错过了curlies。就像现在一样,只有convertToString();是最后一个else的一部分,无论你设置什么错误,最后四个语句都会执行。

试试这个:

cal.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v) 
    {
        boolean failFlag = false;
        // TODO Auto-generated method stub  
        if( eLoan.getText().toString().trim().length() == 0 )
        {
            failFlag = true;
            eLoan.setError( "A value is required" );
        }
        if( eWage.getText().toString().trim().length() == 0 )
        {
            failFlag = true;
            eWage.setError( "A value is required" );
        }
        if( eGrant.getText().toString().trim().length() == 0 )
        {
            failFlag = true;
            eGrant.setError( "A value is required" );
        }
        if( eOther.getText().toString().trim().length() == 0 )
        {
            failFlag = true;                
            eOther.setError( "A value is required" );
        }
        // if all are fine
        if (failFlag == false) {
            convertToString();
            converToDouble();               
            inTotal = inLoan + inWage + inGrant + inOther;
            DecimalFormat currency = new DecimalFormat(".00");
            TotalInNum.setText("£" + currency.format(inTotal));
        }
    }

});

如果存在更多错误,此代码将设置多个错误。你的信号将只发出第一个发现的错误。

答案 2 :(得分:1)

我认为解决此问题的最佳方法是以下示例:

private boolean verifyIfEditTextIsFilled(EditText... editText) {

    boolean result = true;

    for (EditText text : editText) {

        if (text.getText().toString().isEmpty()) {

            final View focusView = text;
            text.setError(getString(R.string.error_required));
            focusView.requestFocus();
            result = false;
        }
    }
    return result;
}

答案 3 :(得分:0)

迟到的答案但可以帮助有需要的人。

最简单的方法 - >

创建方法如下

public Boolean validateUserInput()
    {
        Boolean isAnyFieldsEmpty=false;

        if (position.getText().toString()==null || position.getText().toString().equalsIgnoreCase(""))
        {
            position.setError("Empty postion");
            isAnyFieldsEmpty=true;
        }
        else{
            position.setError(null);
            isAnyFieldsEmpty=false;
        }

        if (eligiblity.getText().toString()==null || eligiblity.getText().toString().equalsIgnoreCase(""))
        {
            eligiblity.setError("Empty postion");
            isAnyFieldsEmpty=true;
        }
        else{
            eligiblity.setError(null);
            isAnyFieldsEmpty=false;
        }

        if (skillsRequired.getText().toString()==null || skillsRequired.getText().toString().equalsIgnoreCase(""))
        {
            skillsRequired.setError("Empty postion");
            isAnyFieldsEmpty=true;
        }
        else{
            skillsRequired.setError(null);
            isAnyFieldsEmpty=false;
        }

        if (desc.getText().toString()==null || desc.getText().toString().equalsIgnoreCase(""))
        {
            desc.setError("Empty postion");
            isAnyFieldsEmpty=true;
        }
        else{
            desc.setError(null);
            isAnyFieldsEmpty=false;
        }

        if (interviewFrmDate.getText().toString()==null || interviewFrmDate.getText().toString().equalsIgnoreCase(""))
        {
            interviewFrmDate.setError("choose date");
            isAnyFieldsEmpty=true;
        }else{
            interviewFrmDate.setError(null);
            isAnyFieldsEmpty=false;
        }

        if (interviewToDate.getText().toString()==null || interviewToDate.getText().toString().equalsIgnoreCase(""))
        {
            interviewToDate.setError("choose date");
            isAnyFieldsEmpty=true;
        }else{
            interviewToDate.setError(null);
            isAnyFieldsEmpty=false;
        }

        if (interviewToTime.getText().toString()==null || interviewToTime.getText().toString().equalsIgnoreCase(""))
        {
            interviewToTime.setError("choose date");
            isAnyFieldsEmpty=true;
        }else{
            interviewToTime.setError(null);
            isAnyFieldsEmpty=false;
        }

        return isAnyFieldsEmpty;
    }

现在点击按钮 调用该方法如下并验证

@overide
public void onclick
{
Boolean isinputEmpty=validateUserInput()
if(isinputEmpty==false)
{

///process your save or whatever processing it is
}

}