How to create Login and Registration page in adroid using SQLite Database - True Gyan

How to create Login and Registration page in adroid using SQLite Database

MainActivity.java

package com.example.registrationpage;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

    private EditText loginUserName, loginPass;
    String currentUserName, currentUserPass;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        loginUserName = (EditText) findViewById(R.id.user_name);
        loginPass = (EditText) findViewById(R.id.user_password);
    }

    public void newUser(View view) {
        Intent intent = new Intent(this, RegisterActivity.class);
        startActivity(intent);
    }

    private void dataExtract() {

        String user_name = loginUserName.getText().toString().trim();
        String user_pass = loginPass.getText().toString().trim();

        DataDbHelper mDbHelper = new DataDbHelper(this);

        SQLiteDatabase db = mDbHelper.getReadableDatabase();

        String[] projection = {
                DataContract.DataEntry.COLUMN_EMAIL,
                DataContract.DataEntry.COLUMN_PASSWORD };

        Cursor cursor = db.query(DataContract.DataEntry.TABLE_NAME,
                projection,
                null,
                null,
                null,
                null,
                null,
                null);

        try {

            int userNameIndex = cursor.getColumnIndex(DataContract.DataEntry.COLUMN_EMAIL);
            int userPassIndex = cursor.getColumnIndex(DataContract.DataEntry.COLUMN_PASSWORD);

            while (cursor.moveToNext()) {

                currentUserName = cursor.getString(userNameIndex);
                currentUserPass = cursor.getString(userPassIndex);

                if (currentUserName.equalsIgnoreCase(user_name) &&
                        currentUserPass.equalsIgnoreCase(user_pass)){

                    Toast.makeText(this, "LogIn Successful", Toast.LENGTH_SHORT).show();
                    break;
                }
                if (cursor.isLast()) {
                    Toast.makeText(this, "user name and password are incorrect.",
                            Toast.LENGTH_SHORT).show();
                }
            }

        } finally {
            cursor.close();
        }
    }

    public void loginuser(View view) {

        if (TextUtils.isEmpty(loginUserName.getText())) {
            loginUserName.setError("This field is not empty");
        }
        if (TextUtils.isEmpty(loginPass.getText())) {
            loginPass.setError("This field is not empty");
        } else {
            dataExtract();
        }
    }
}

RegisterActivity.java

package com.example.registrationpage;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import java.util.regex.Pattern;

public class RegisterActivity extends AppCompatActivity {

    private EditText mName, mEmail, mPassword, cPassword;
    private String passwordString, cpassString, nameString, emailString;
    private String namePattern = "^[A-Za-z\\s]{1,}[\\.]{0,1}[A-Za-z\\s]{0,}$";
    private String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
    private static final Pattern passwordPattern = Pattern.compile("^" +
            "(?=.*[0-9])" +         //at least one digit
            "(?=.*[A-Z])" +         //at least one upper case latter
            "(?=.*[a-z])" +         //at least one lower case latter
            "(?=.*[a-zA-Z])" +      //any latter
            "(?=.*[@#$%^&+=])" +    //at least one special character
            "(?=\\S+$)" +           //no white space
            ".{8,}" +               //at least 8 character
            "$");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        mName = (EditText) findViewById(R.id.name);
        mEmail = (EditText) findViewById(R.id.username);
        mPassword = (EditText) findViewById(R.id.password);
        cPassword = (EditText) findViewById(R.id.cPassword);

    }

    private void insertData() {

        DataDbHelper mDbHelper = new DataDbHelper(this);

        SQLiteDatabase db = mDbHelper.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(DataContract.DataEntry.COLUMN_NAME, nameString);
        values.put(DataContract.DataEntry.COLUMN_EMAIL, emailString);
        values.put(DataContract.DataEntry.COLUMN_PASSWORD, passwordString);

        long newRowID = db.insert(DataContract.DataEntry.TABLE_NAME, null, values);

        if (newRowID == -1) {
            Toast.makeText(this, "Error with saving pet", Toast.LENGTH_SHORT).show();
        } else {
            // Otherwise, the insertion was successful and we can display a toast with the row ID.
            Toast.makeText(this, "Registration Successfull", Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
        }

    }

    public void regButton(View view) {

        nameString = mName.getText().toString().trim();
        emailString = mEmail.getText().toString().trim();
        passwordString = mPassword.getText().toString().trim();
        cpassString = cPassword.getText().toString().trim();

        if (TextUtils.isEmpty(mName.getText())) {
            mName.setError("This field is not empty!");
        } else if (!nameString.matches(namePattern)) {
            mName.setError("Enter valid full name!");
        } else if (!emailString.matches(emailPattern)) {
            mEmail.setError("Enter valid Email address!");
        } else if (TextUtils.isEmpty(mEmail.getText())) {
            mEmail.setError("This field is not empty!");
        } else if (TextUtils.isEmpty(mPassword.getText())) {
            mPassword.setError("This field is not empty!");
        } else if (!passwordString.equals(cpassString)) {
            cPassword.setError("Current password is not matching!");
        } else if (!passwordPattern.matcher(passwordString).matches()) {
            mPassword.setError("Please enter at least 8 character,at least one upper case latter,"
                    + " at least one lower case latter, at least one number,"
                    + " at least one special character and no white space!");
        } else {
            insertData();
        }
    }
}

DataContract.java

package com.example.registrationpage;

import android.provider.BaseColumns;

public class DataContract {

    private DataContract () {}

    public static final class DataEntry implements BaseColumns {

        public final static String TABLE_NAME = "register";
        public final static String _ID = BaseColumns._ID;
        public final static String COLUMN_NAME = "name";
        public final static String COLUMN_EMAIL = "email";
        public final static String COLUMN_PASSWORD = "password";

    }
}


DataDbHelper.java

package com.example.registrationpage;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;

public class DataDbHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "mydata.db";
    private static final int DATABASE_VIRSION = 1;

    public DataDbHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VIRSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String SQL_CREATE_TABLE = "CREATE TABLE " + DataContract.DataEntry.TABLE_NAME
                + " (" + DataContract.DataEntry._ID + " INTEGER PRIMARY KEY, "
                + DataContract.DataEntry.COLUMN_NAME + " TEXT NOT NULL, "
                + DataContract.DataEntry.COLUMN_EMAIL + " TEXT NOT NULL, "
                + DataContract.DataEntry.COLUMN_PASSWORD + " TEXT NOT NULL);";

        db.execSQL(SQL_CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:con0text=".MainActivity"
    android:orientation="vertical"
    android:padding="16dp">
q
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Email"
        android:id="@+id/user_name"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="password"
        android:id="@+id/user_password"/>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <Button
        android:paddingTop="5dp"
        android:paddingRight="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login"
        android:onClick="loginuser"/>

    <Button
        android:onClick="newUser"
        android:paddingTop="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Registration" />
</LinearLayout>

</LinearLayout>

activity_register.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.registrationpage.RegisterActivity"
    android:orientation="vertical">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Name"
        android:id="@+id/name"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Email"
        android:id="@+id/username"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="password"
        android:id="@+id/password"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Confirm password"
        android:id="@+id/cPassword"/>

    <Button
        android:paddingTop="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Submit"
        android:onClick="regButton"/>

</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.registrationpage">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".RegisterActivity"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>