0

我在使用来自 EditText 的验证输入时遇到问题。每当我单击 SaveData 按钮时,无论它是否有效,都会弹出对话框。这是我写的示例:

验证类:

package android.week04Lab03;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.webkit.URLUtil;
import android.widget.EditText;

public class Validation {

public boolean isEmpty(EditText txt){

    if(txt.getText().toString().equals("")){            
        return false;
    } else
        return true;

}

public boolean isURL (EditText txt){
    if (!URLUtil.isValidUrl(txt.getText().toString())){
        return false;
    } 
    return true;
}

public boolean isEmail (EditText txt){
    String isEmail = "^([^@\\s]+)@((?:[-a-z0-9]+\\.)+[a-z]{2,})$";
    Pattern isEmailPattern = Pattern.compile(isEmail);
    Matcher mailMatcher = isEmailPattern.matcher(txt.getText().toString());
    if (!mailMatcher.find()) {
        return false;
    }
    return true;
}

}

这是活动课

public class MetaData extends Activity {
Validation validator;
ImageView angel;
EditText name, loc, keyword, date, mail;
ToggleButton share;
RatingBar rating;
Button save;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_meta_data);        
    name = (EditText) findViewById(R.id.name);
    ..........................

public void saveData(View v) {
    Validation validator = new Validation();

    if (!validator.isEmpty(name)) {

        AlertDialog.Builder alert = new AlertDialog.Builder(this);
        alert.setTitle("Input Validation Warning");
        alert.setIcon(R.drawable.ic_launcher);
        alert.setMessage("Error found, please enter your information correctly!");
        alert.setPositiveButton("OK",
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        return;

                    }
                });
        alert.show();
    }

}
4

4 回答 4

2

这不是检查字符串是否为空的方法。因为如果您的 Edittext 中有一个或多个空格,它将失败。

所以像这样检查长度

 if(txt.getText().toString().trim().length() == 0){         
        return false;
    } else
        return true;

您还应该将字符串与equals方法进行比较。

当您在 "" 之间给出比较时, == 也将被视为相等。所以在这种情况下没有问题。

于 2013-04-17T11:23:35.850 回答
2

只需使用 equals() 而不是 == 来检查字符串是否为空

txt.getText().toString().equals("")代替txt.getText().toString() == ""

==比较两个对象而不是它的值

于 2013-04-17T11:23:42.723 回答
1

代替使用if(txt.getText().toString() == "")来比较字符串,您可以尝试使用if(txt.getText().toString().equals(""))吗?


除了你的问题,我发现你的逻辑可能有点混乱:

首先,你做了这个字符串比较

public boolean isEmpty(EditText txt){

    if(txt.getText().toString() == ""){         
        return false;
    } else
        return true;

}

如果 EditText 中的字符串为空,则您尝试执行的操作是return false您的方法,否则。isEmptyreturn true

然后,您if (!validator.isEmpty(name))saveDate()方法中执行了此操作,这意味着,根据您的代码:

if (validator.isEmpty(name) == false) // isEmpty returned false, means getText got an empty String

如果 EditText 为空,isEmpty为什么不做呢?return true这将使您以后更容易理解代码。

于 2013-04-17T11:31:08.173 回答
0
      EditText e1;
e1=(EditText)findViewById(R.id.et1); 
int et1=e1.getText().toString().trim().length();

        public boolean isEmpty(EditText txt){

           if(et1>0)
        {            
                return false;
            } else
                return true;

        }
    try This..May Be Its Helpfull For You.          
于 2013-04-17T13:53:27.017 回答