Search code examples
androidandroid-sqlite

Complete SignIn & SignUp in Android with sqlite Database?


How to create a simple SignUp(Email, UserName, Password) to sqlite. Then SignIn / LogIn using their UserName & Password ?

I tried this code but getting error on Inserting. This code is wrote on SignUp

String user=username.getText().toString();
String pass=password.getText().toString();
String mail=email.getText().toString();

if ((user.matches(""))||(pass.matches(""))||(mail.matches(""))) {
   Log.d("SignUp", "Vacant Field");
   return;
}
else {
    DatabaseAdapter dbadapter=new DatabaseAdapter(null);
    dbadapter.insertdata(user, pass, mail);

    Log.d("SignUp", "Data's stored in SQLite");
}

In the DatabaseAdapter class I used this code

public class DatabaseAdapter {

static final String DATABASE_NAME = "login.db";
static final int DATABASE_VERSION = 1;
public static final int NAME_COLUMN = 1;

// SQL to Create a new Database
static final String DATABASE_CREATE= "create table "+"LOGIN"+
        "( " +"ID"+" integer primary key autoincrement,"+ "USERNAME  text,PASSWORD text, EMAIL text); ";

// Variable to hold the database instance
public SQLiteDatabase db;

// Context of the application using the database.
private final Context context;

// Database open/upgrade helper
private DataBaseHelper dbHelper;

public DatabaseAdapter(Context _context)
{
    context = _context;
    dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
}

public DatabaseAdapter open() throws SQLException
{
    db = dbHelper.getWritableDatabase();
    return this;
}

public void close() 
{
    db.close();
}

public  SQLiteDatabase getDatabaseInstance()
{
    return db;
}

// to store data`s in SQLite db
public void insertdata(String username, String password, String email)
{
    ContentValues values=new ContentValues();

    // Assign values for each row.
    values.put("USERNAME", username);
    values.put("PASSWORD", password);
    values.put("EMAIL", email);
    Log.d("DatabaseAdapter", "Data's are assin to insert");

    // Insert the row into your table
    db.insert("LOGIN", null, values);
    Log.d("DatabaseAdapter", "Data's stored successfully");
    db.close();
}

public String getSingleEntry(String userName)
{
    Cursor cursor=db.query("LOGIN", null, " USERNAME=?", new String[]{userName}, null, null, null);
    if(cursor.getCount()<1) // UserName Not Exist
    {
        cursor.close();
        return "NOT EXIST";
    }
    cursor.moveToFirst();
    String password= cursor.getString(cursor.getColumnIndex("PASSWORD"));
    cursor.close();
    return password;
   }
}

While pressing SignUp Button am getting error's

 FATAL ERROR, Null pointer Exception Error

Solution

  • signup.java (Activity)

    package...name;
    
        import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;
        import android.view.View;
        import android.widget.EditText;
        import android.widget.TextView;
        import android.widget.Toast;
    
        public class signup extends AppCompatActivity {
        DatabaseHelper helper = new DatabaseHelper(this);
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_signup);
    
            //to link to the second activity
            TextView loginScreen = (TextView) findViewById(R.id.link_to_login);
            // Listening to Login Screen link
            loginScreen.setOnClickListener(new View.OnClickListener() {
    
                public void onClick(View arg0) {
                    // Closing registration screen
                    // Switching to Login Screen/closing register screen
                    finish();
                }
            });
        }
        public void onSignUpClick(View v){
            if(v.getId() == R.id.btn_Register)
            {
                EditText name = (EditText)findViewById(R.id.TFname);
                EditText email = (EditText)findViewById(R.id.TFemail);
                EditText pass1 = (EditText)findViewById(R.id.TFpass1);
                EditText pass2 = (EditText)findViewById(R.id.TFpass2);
    
                String namestr = name.getText().toString();
                String emailstr = name.getText().toString();
                String pass1str = name.getText().toString();
                String pass2str = name.getText().toString();
    
                if(!pass1str.equals(pass2str))
                {
                    //popup msg:
                    Toast tpass = Toast.makeText(signup.this, "passwords don't match", Toast.LENGTH_LONG);
                    tpass.show();
                }
                else
                {
                    //insert the details in DB:
                    Contact c = new Contact();
                    c.setName(namestr);
                    c.setEmail(emailstr);
                    c.setPass(pass1str);
    
                    helper.insertContact(c);
                }
    
            }
        }
    
    }
    

    DatabaseHelper.java (Class)

    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    
    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_EMAIL = "email";
        private static final String COLUMN_UNAME = "uname";
        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, email text not null, uname 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 void insertContact(Contact c)
        {
            db = this.getWritableDatabase();
            ContentValues values = new ContentValues();
    
            //create a string query
            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_EMAIL, c.getEmail());
            values.put(COLUMN_PASS, c.getPass());
    
            //this will insert the content in the database
            db.insert(TABLE_NAME, null, values);
            db.close();
        }
    
        public String searchPass(String name){
    
            db = this.getReadableDatabase();
            String query = "select name, pass from" +TABLE_NAME;
            Cursor cursor = db.rawQuery(query, null);
            String a, b;
            b="not found";
            if(cursor.moveToFirst()){
                do{
                    a=cursor.getString(0);
    
                    if(a.equals(name)){
                        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);
        }
    }
    

    Contact.java (class)

    public class Contact {
        String name, email, uname, pass;
    
    
        public void setName(String name)
        {
            this.name  = name;
        }
        public String getName()
        {
            return this.name;
        }
        public void setEmail(String email)
        {
            this.email  = email;
        }
        public String getEmail()
        {
            return this.email;
        }
        public void setUname(String uname)
        {
            this.uname  = uname;
        }
        public String getUname()
        {
            return this.uname;
        }
        public void setPass(String pass)
        {
            this.pass  = pass;
        }
        public String getPass()
        {
            return this.pass;
        }
    
    }
    

    Login.java (Activity)

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class Login extends Activity {
    
        DatabaseHelper helper = new DatabaseHelper(this);
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
    
            TextView registerScreen = (TextView) findViewById(R.id.link_to_signup);
    
            // Listening to register new account link
            registerScreen.setOnClickListener(new View.OnClickListener() {
    
                public void onClick(View v) {
                    // Switching to Register screen
                    Intent i = new Intent(getApplicationContext(), signup.class);
                    startActivity(i);
                }
            });
        }
        public void onSigninClick(View v){
            if(v.getId() == R.id.btnLogin)
            {
                EditText a = (EditText)findViewById(R.id.TFname);
                String str = a.getText().toString();
                EditText b = (EditText)findViewById(R.id.TFpassword);
                String pass = a.getText().toString();
    
                String password = helper.searchPass(str);
                if(pass.equals(password))
                {
                    Intent i = new Intent(Login.this, signup.class);
                    i.putExtra("name" , str);
                    startActivity(i);
                }
                else{//popup msg:
                    Toast temp = Toast.makeText(Login.this, "username & passwords don't match", Toast.LENGTH_LONG);
                    temp.show();}
            }
    
        }
    }
    

    Display.java (Activity)

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class Display extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_display);
            String name = getIntent().getStringExtra("name");
            TextView tv = (TextView)findViewById(R.id.TFname);
            tv.setText(name);
        }
    
    }