2013-04-17 157 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.