我在使用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();
}
}
答案 0 :(得分:2)
这不是检查字符串是否为空的方法。因为如果Edittext中有一个或多个空格,它将会失败。
所以检查这样的长度
if(txt.getText().toString().trim().length() == 0){
return false;
} else
return true;
您还应该使用equals
方法比较字符串。
当你在比较之间给出一些东西时,==也将被视为等于。所以在那种情况下没问题。
答案 1 :(得分:2)
只需使用equals()而不是==检查字符串是否为空
txt.getText().toString().equals("")
代替txt.getText().toString() == ""
== 比较两个对象而不是它的值
答案 2 :(得分: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
方法isEmpty
为return true
,否则为if (!validator.isEmpty(name))
。
然后,您在saveDate()
方法中执行了此if (validator.isEmpty(name) == false) // isEmpty returned false, means getText got an empty String
,这意味着,根据您的代码:
isEmpty
如果EditText为空,为什么不将return true
设为{{1}}?这将使您以后更容易理解代码。
答案 3 :(得分: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.