Android:我只想进行验证,以避免重复电子邮件地址

时间:2015-09-07 13:13:41

标签: java android eclipse android-studio

我的错误:

位于com.me.samples上的com.me.samplesqlite.DatabaseHelper.checkEmailExists(DatabaseHelper.java:83),com.me.samplesqlite .Database.Delper.insert(DatabaseHelper.java:67),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._-]+@[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);
        }
    }

2 个答案:

答案 0 :(得分:0)

使用以下

重新检查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.用此替换您的创建表查询并告诉我

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);

答案 1 :(得分: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();

  1. 在您的活动代码中调用此函数并获取列表,如上所述,假设您有5条记录,那么您首先要检查列表的长度,如果是索引4,请说明它的长度
  2. 3在保存数据之前按钮点击事件,你最喜欢运行for循环,从列表零开始从列表中获取每个电子邮件,并将其与用户当前输入的电子邮件地址进行比较,如果它存在则停在那里告诉用户有关错误,如果没有,则继续将数据保存到数据库,然后注册将继续

    您需要实施的所有内容。