2013-03-29 24 views
0

我正在尝试制作Android应用程序的注册表单。我使用MySQLite制作了一个数据库适配器。检查EditText空条目并验证它

我一直面临的问题是输入到EditText控件的条目的验证。 当我点击注册按钮时,信息应该存储在数据库中,确保条目不为空,确认密码与密码匹配,最重要的是用户名尚未使用。我已经尝试过所有的方法来做到这一点,但它要么是运行时强制关闭错误,要么是验证没有按照我想要的方式工作。

final EditText unedit = (EditText) findViewById(R.id.unedit); 
    final EditText passedit = (EditText) findViewById(R.id.passedit); 
    final EditText conpassedit = (EditText) findViewById(R.id.conpassedit); 
    final EditText nameedit = (EditText) findViewById(R.id.nameedit); 
    final EditText emailedit = (EditText) findViewById(R.id.emailedit); 
    final EditText mobedit = (EditText) findViewById(R.id.mobedit); 

    Button register = (Button) findViewById(R.id.registerbutton); 

    register.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      String username = unedit.getText().toString(); 
      String password = passedit.getText().toString(); 
      String conpassword = conpassedit.getText().toString(); 
      String name = nameedit.getText().toString(); 
      String email = emailedit.getText().toString(); 
      String mobileno = mobedit.getText().toString(); 

      RegDb reg = new RegDb(Register.this); 
      reg.open(); 
      String returnedUn = reg.getUn(username); 
      reg.close(); 

      if (username.isEmpty()) { 
       unedit.setError("Username is required"); 
       // return; 
      } 
      if (password.isEmpty()) { 
       passedit.setError("Password is required"); 
       // return; 
      } 
      if (conpassword.isEmpty()) { 
       conpassedit.setError("Password confirmation is required"); 
       // return; 
      } 
      if (name.isEmpty()) { 
       nameedit.setError("Name is required"); 
       // return; 
      } 
      if (email.isEmpty()) { 
       emailedit.setError("Email is required"); 
       // return; 
      } 
      if (mobileno.isEmpty()) { 
       mobedit.setError("Mobile No is required"); 
       // return; 
      } 
      if (username.equals(returnedUn)) { 
       unedit.setError("Username is already used"); 
       // return; 
      } 
      if (!conpassword.equals(password)) { 
       passedit.setError("Check your password"); 
       // return; 
      } 
      if (!username.isEmpty() && !password.isEmpty() 
        && !name.isEmpty() && !email.isEmpty() 
        && !mobileno.isEmpty() && conpassword.equals(password) 
        && !username.equals(returnedUn)) { 
       Dialog d = new Dialog(v.getContext()); 
       d.setTitle("Account created."); 
       d.show(); 
      } else { 
       return; 
      } 

我也使用了try-catch-finally,但验证似乎无法工作。

boolean created = true; 

       try { 

        if (!username.isEmpty() && !password.isEmpty() 
        && !name.isEmpty() && !email.isEmpty() 
        && !mobileno.isEmpty() && conpassword.equals(password) 
        && !username.equals(returnedUn)){ 
        RegDb entry = new RegDb(Register.this); 
        entry.open(); 
        entry.createEntry(username, password, name, email, 
          mobileno); 

        entry.close(); 
       } 

      } catch (Exception e) { 
       created=false; 
       Dialog d = new Dialog(v.getContext()); 
       d.setTitle("Please check your entries."); 
       d.show(); 

      } finally { 
       if (created) { 
        Dialog d = new Dialog(v.getContext()); 
        d.setTitle("Account created."); 

        Intent i = new Intent(v.getContext(), 
          MainActivity.class); 
        startActivity(i); 

       } 
      } 

请赐教我我做错了什么,应该做什么。

+0

http://stackoverflow.com/questions/6290531/check-if-edittext-is-empty –

回答

0

首先你不需要申报这样final EditText unedit = (EditText) findViewById(R.id.unedit);

你可以在类级别声明为

private EditText unedit; 

现在在onCreate()方法获得它采用以下方式,

unedit = (EditText) findViewById(R.id.unedit); 

并检查字符串变量如下,

String username = unedit.getText().toString().trim(); // Add Trim() method 

if (username.equals("")) { 
       unedit.setError("Username is required"); 
       // return; 
      } 

其他所有相同。

+0

谢谢!我会考虑这一点。但是如果我想继续将值存储到数据库中,那我该如何验证所有字符串都不是空的,用户名不存在于数据库中,并且确认密码等于密码? –

+0

只是在存入数据库之前检查字符串。 – Raynold