2013-03-29 27 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