2013-04-17 159 views
0

我遇到了EditText的验证输入问题。 每当我点击保存数据按钮,无论它是有效还是不是有效。 这里是什么样我写道:EditText验证不起作用

验证类:

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

而不是使用'如果(txt.getText()。的toString()== “”)'比较字符串,也许使用'如果(txt.getText()。的toString()。等于(” “))'而不是? – dumbfingers

+1

@ ss1271,请将您的回答格式化为答案。 – Egor

+0

在isEmpty方法中使用txt.getText()。toString()。equals(“”)。 ==用于数字操作。 – SKK

回答

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中的字符串为空,则在isEmpty方法中为return false;否则为return true

然后,你这样做if (!validator.isEmpty(name))saveDate()方法,这意味着,根据您的代码:

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

为什么不把isEmptyreturn true如果EditText上是空的?这会让你更容易理解后面的代码。

+0

+1首先回答...其实你值得代表这个问题 – Pragnani

+0

你是伟大的伴侣:) – babygau

2

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

因此,检查长度这样

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

,你也应该比较与equals方法字符串。

当您在“”之间进行比较时,==也将被视为等于。所以在这种情况下没有问题。

2

只需使用equals()方法,而不是==用于检查字符串为空或不

txt.getText().toString().equals("")而不是txt.getText().toString() == ""

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

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.