2015-09-07 17 views
0

我的錯誤:安卓:我只是想有避免電子郵件地址重複驗證

處com.me.samplesqlite.DatabaseHelper com.me.samplesqlite.DatabaseHelper.checkEmailExists(DatabaseHelper.java:83) .insert(DatabaseHelper.java:67)at com.me.samplesqlite.SignUp.onSignUpClick(SignUp.java:84)

我收到我註冊的所有字段後出現錯誤(強制停止)模塊。

我只想驗證一下避免重複的電子郵件地址。有人請幫助我進行這種驗證?這是一個簡單的註冊和一些驗證。所以,我的目標是避免重複插入電子郵件地址的數據。

我的目標是當有將無法使用相同的電子郵件重新註冊

**package com.me.samplesqlite; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.view.View.OnClickListener; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.Button; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 


public class SignUp extends Activity 
{ 
    DatabaseHelper helper = new DatabaseHelper(this); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.signup); 
    } 

    public void onSignUpClick(View view) 
    { 

     if(view.getId() == R.id.btnSignUp) 
     { 

      EditText name = (EditText)findViewById(R.id.txtName); 
      EditText uname = (EditText)findViewById(R.id.txtUsername); 
      EditText email = (EditText)findViewById(R.id.txtEmail); 
      EditText pass = (EditText)findViewById(R.id.txtPassword); 
      EditText cpass = (EditText)findViewById(R.id.txtConfirmPass); 

      String sname = name.getText().toString(); 
      String suname = uname.getText().toString(); 
      String semail = email.getText().toString(); 
      String spass = pass.getText().toString(); 
      String scpass = cpass.getText().toString(); 

      if(sname.length()==0 && suname.length()==0 && semail.length()==0 && spass.length()==0) 
      { 
       name.requestFocus(); 
       name.setError("FIELD CANNOT BE EMPTY"); 
       uname.requestFocus(); 
       uname.setError("FIELD CANNOT BE EMPTY"); 
       email.requestFocus(); 
       email.setError("FIELD CANNOT BE EMPTY"); 
       pass.requestFocus(); 
       pass.setError("FIELD CANNOT BE EMPTY"); 
      } 
      else if(!sname.matches("[a-zA-Z]+")) 
      { 
       name.requestFocus(); 
       name.setError("ENTER ONLY ALPHABETICAL CHARACTER"); 
      } 
      else if(!(spass.length()>5)) 
      { 
       pass.requestFocus(); 
       pass.setError("PASSWORD MUST HAVE MORE THAN 5 CHARACTERS"); 
      } 

      else if (!scpass.equals(spass)) 
      { 
       cpass.requestFocus(); 
       cpass.setError("PASSWORD DON'T MATCH"); 
      } 
      else if(!semail.matches("[a-zA-Z0-9._-][email protected][a-z]+\\.+[a-z]+")) 
      { 
       email.requestFocus(); 
       email.setError("INVALID EMAIL ADDRESS"); 
      } 
      else 
      { 
       Contact b = new Contact(); 
       boolean isEmailExist = helper.insertContact(b); 
       if(isEmailExist) 
       { 
        // notify user 
        Toast mail = Toast.makeText(SignUp.this, "Email Already Exist." , Toast.LENGTH_SHORT); 
        mail.show(); 

       } 
       else 
       { 
        // proceed 
        Contact c = new Contact(); 
        c.setName(sname); 
        c.setUName(suname); 
        c.setEmail(semail); 
        c.setPass(spass); 

        helper.insertContact(c); 

        //popup message 
        Toast password = Toast.makeText(SignUp.this, "Data has been saved." , Toast.LENGTH_SHORT); 
        password.show(); 
        Intent i = new Intent(SignUp.this, MainActivity.class); 
        startActivity(i); 

       } 
       //insert the details on database 

      } 


     } 
     if(view.getId() == R.id.btnCancelSign) 
     { 
      Intent i = new Intent(SignUp.this, MainActivity.class); 
      startActivity(i); 
      finish(); 
     } 

    } 
} 
** 



package com.me.samplesqlite; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteDatabase; 



public class DatabaseHelper extends SQLiteOpenHelper 
    { 
     private static final int DATABASE_VERSION = 1; 
     private static final String DATABASE_NAME = "contacts.db"; 
     private static final String TABLE_NAME = "contacts"; 
     private static final String COLUMN_ID = "id"; 
     private static final String COLUMN_NAME = "name"; 
     private static final String COLUMN_UNAME = "uname"; 
     private static final String COLUMN_EMAIL = "email"; 
     private static final String COLUMN_PASS = "pass"; 

     SQLiteDatabase db; 

     private static final String TABLE_CREATE = "create table contacts (id integer primary key not null , " + 
       "name text not null , uname text not null , email text not null , pass text not null);"; 

     public DatabaseHelper(Context context) 
     { 
      super(context , DATABASE_NAME , null , DATABASE_VERSION); 

     } 


     @Override 
     public void onCreate(SQLiteDatabase db) 
     { 
      db.execSQL(TABLE_CREATE); 
      this.db = db; 
     } 

     public boolean insertContact(Contact c) 
     { 
      boolean isEmailExist = false; 
      db = this.getReadableDatabase(); 
      ContentValues values = new ContentValues(); 

      String query = "select * from contacts"; 
      Cursor cursor = db.rawQuery(query, null); 
      int count = cursor.getCount(); 


      values.put(COLUMN_ID, count); 
      values.put(COLUMN_NAME , c.getName()); 
      values.put(COLUMN_UNAME , c.getUName()); 
      values.put(COLUMN_EMAIL , c.getEmail()); 
      values.put(COLUMN_PASS, c.getPass()); 

      if(checkEmailExists(c.getEmail())) 
      { 
       isEmailExist = true; 
      } 
      else 
      { 
       db.insert(TABLE_NAME, null, values); 
      } 
      db.close(); 
      return isEmailExist; 
     } 

     private boolean checkEmailExists(String email) { 
      String query = new StringBuilder().append("Select ") 
        .append(email).append(" from ").append(TABLE_NAME) 
        .toString(); 
      Cursor cursor = db.rawQuery(query, 
        new String[] { email }); 
      if (cursor.getCount() > 0) { 
       cursor.close(); 
       return true; 
      } else { 
       cursor.close(); 
       return false; 
      } 
     } 


     public String searchPass(String uname) 
     { 
      db = this.getReadableDatabase(); 
      String query = "select uname, pass from "+ TABLE_NAME; 
      Cursor cursor = db.rawQuery(query , null); 

      String a,b; 
      b = "not found"; 
      if(cursor.moveToFirst()) 
      { 
       do 
       { 
        a = cursor.getString(0); 
        b = cursor.getString(1); 

        if(a.equals(uname)) 
        { 
         b = cursor.getString(1); 
         break; 
        } 

       }while(cursor.moveToNext()); 
      } 
      return b; 
     } 


     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
     { 
      String query = "DROP TABLE IF EXISTS "+TABLE_NAME; 
      db.execSQL(query); 
      this.onCreate(db); 
     } 
    } 
+0

什麼是你的問題你得到錯誤哪些強制關閉你的應用程序或者你不能驗證重複的電子郵件? – Pavan

+0

當我按下注冊按鈕強制關閉時,我填寫了註冊模塊中的所有字段。 –

+0

好的,然後請發佈您的日誌.. – Pavan

回答

0

relpace您checkEmailExists下面

private boolean checkEmailExists(String email) { 
     String query = "Select * from "+TABLE_NAME+" where email like '"+email+"'"; 


     Cursor cursor = db.rawQuery(query, 
       null); 
     if (cursor.getCount() > 0) { 
      cursor.close(); 
      return true; 
     } else { 
      cursor.close(); 
      return false; 
     } 
    } 

2.Replace現有的電子郵件地址,你的用這個創建表查詢並讓我知道

private static final String TABLE_CREATE = "create table IF NOT EXISTS contacts (id integer primary key not null , " + 
      "name text not null , uname text not null , email text not null , pass text not null);"; 

3.您也傳遞空白對象到數據庫的電子郵件檢查替換與下面

Contact b = new Contact(); 
        b.setName(sname); 
        b.setUName(suname); 
        b.setEmail(semail); 
        b.setPass(spass); 

       boolean isEmailExist = helper.insertContact(b); 
+0

好吧我現在就試試。 –

+0

我註冊強制關閉後仍然無法工作。 –

+0

現在它的時間來檢查您的DatabaseHelper代碼plz更新您的錯誤堆棧,以便我們可以更好地幫助您在com.me.samplesqlite.DatabaseHelper.checkEmailExists(DatabaseHelper.java:83) – Pavan

0

我認爲你是比較它錯了。在這個功能碼

private boolean checkEmailExists(String email) { 
      String query = new StringBuilder().append("Select ") 
        .append(email).append(" from ").append(TABLE_NAME) 
        .toString(); 
      Cursor cursor = db.rawQuery(query, 
        new String[] { email }); 
      if (cursor.getCount() > 0) { 
       cursor.close(); 
       return true; 
      } else { 
       cursor.close(); 
       return false; 
      } 
     } 

你的這部分你正在服用哪些是電子郵件進入由用戶直接把它在數據庫中,但在這裏你已經完成了匹配? 哪部分代碼顯示您正在比較數據庫電子郵件地址中的電子郵件。

你應該做的是 1.在數據庫中將數據庫中的函數返回給你的數據庫中,讓我們假設你有5條記錄,每條記錄都有電子郵件,所以創建一個返回函數只有電子郵件的列表,比方說這個函數被稱爲emailList();

  • 調用這個函數在你的活動代碼,並獲得名單,正如我上面所說假設你有5條,所以你必須先檢查列表的長度,讓說,它的長度,如果在按鈕單擊事件指數4
  • 3保存數據之前,你最喜歡的,如果運行for循環,從指數零從列表中獲取每個電子郵件和用戶將其與當前輸入的電子郵件地址比較,它存在停在那裏,並告訴用戶有關錯誤,如果沒有,然後繼續保存數據到數據庫和註冊將繼續

    所有你需要 實行。

    +0

    好吧謝謝你我會盡力做到我的程序。 –