• Facebook
  • Twitter
  • YouTube
  • LinkedIn
Tutorials Cache
  • Home
  • Android
  • IOS
  • Freelancing
  • Business
  • Web Development
  • Hire Us
  • Other Pages
    • About Us
    • Contact US
    • Privacy Policy
    • Disclaimer
Android

Android Login and Signup using PHP MySQL

By Tausif Ul Rahman July 1, 2019
Android Login and Signup using PHP MySQL

How to build REST API? How to connect an android application with PHP and MySQL database? What is JSON? How to make POST Server requests in android? How to build login signup in android using PHP and MySQL? These are the main questions that came to mind once we think about connecting the android application with the server. In this tutorial, we will try to answer these questions and will make a complete user registration system.

If you are new to android development then you must first learn how to parse using this tutorial. JSON Parsing in Android.

Let’s get started with creating a database and REST API script.

Content Details Hide
1 1. Create a Database
2 2. Create Users Table
3 3. PHP REST API
4 4. Create a New Android Studio Project
5 5. AndroidManifest.xml INTERNET Permissions
6 6. Third-party libraries Loopj & Picasso.
6.1 7. GlobalClass.java
6.2 8. WebReq.java
6.3 9. AndroidManifest.xml Intent Filter
6.4 10. MainActivity.java
6.5 11. activity_home.xml
6.6 12. HomeActivity.java
6.7 13. activity_splash.xml
6.8 14. SplashActivity.java
6.9 15. activity_login.xml
6.10 14. LoginActivity.java
6.11 15. activity_signup.xml
6.12 16. SignupActivity.java

1. Create a Database

Start your server and create a new database with the name android_app.

android_app database

After creating the database now we need to create a user table. Copy the below code and run it in the SQL section of your server.

2. Create Users Table

--
-- Table structure for table `users`
--
CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

After creating the user’s table this is how it will look in the Structure view.

table architecture
table architecture

3. PHP REST API

Now we need to write a simple PHP API that will be used to exchange data between the app and web server. Follow below simple steps to create API.

  1. Create a new folder named androidapp inside htdocs/www.
  2. Create a new PHP file under androidAppFolder and name it api.php

To avoid any complexity of files we will use only one api.php file for the whole REST API functionality. You can copy the below code and paste it into your api.php file. It has comments at each step so as a result of that you can understand it easily.

Api.php


<?php 
// step 1: connect to database
// mysqli_connect function has 4 params (host,user name, password,database_name)
$db_con = mysqli_connect("localhost","root","root","android_app");
$response = array();
header('Content-Type: application/json');
if(mysqli_connect_errno())
{
    $response["error"] = TRUE;
    $response["message"] ="Faild to connect to database";
    echo json_encode($response);
    exit;
}
if(isset($_POST["type"]) && ($_POST["type"]=="signup") && isset($_POST["name"]) && isset($_POST["email"]) && isset($_POST["password"])){
    // signup user
    $name = $_POST["name"];
    $email = $_POST["email"];
    $password = md5($_POST["password"]);
    //check user email whether its already regsitered
    $checkEmailQuery = "select * from users where email = '$email'";
    $result = mysqli_query($db_con,$checkEmailQuery);
    // print_r($result); exit;
    if($result->num_rows>0){
        $response["error"] = TRUE;
        $response["message"] ="Sorry email already found.";
        echo json_encode($response);
        exit;
    }else{
        $signupQuery = "INSERT INTO users(name,email,password) values('$name','$email','$password')";
        $signupResult = mysqli_query($db_con,$signupQuery);
        if($signupResult){
            // Get Last Inserted ID
            $id = mysqli_insert_id($db_con);
            // Get User By ID
            $userQuery = "SELECT id,name,email FROM users WHERE id = ".$id;
            $userResult = mysqli_query($db_con,$userQuery);
            
            $user = mysqli_fetch_assoc($userResult);
            
            $response["error"] = FALSE;
            $response["message"] = "Successfully signed up.";
            $response["user"] = $user;
            echo json_encode($response);
            exit;
        }else{
            $response["error"] = TRUE;
            $response["message"] ="Unable to signup try again later.";
            echo json_encode($response);
            exit;
        }
        
    }
}else if(isset($_POST["type"]) && ($_POST["type"]=="login") && isset($_POST["email"]) && isset($_POST["password"])){
    //login user
    $email = $_POST["email"];
    $password = md5($_POST["password"]);
    $userQuery = "select id,name,email from users where email = '$email' && password = '$password'";
    $result = mysqli_query($db_con,$userQuery);
    // print_r($result); exit;
    if($result->num_rows==0){
        $response["error"] = TRUE;
        $response["message"] ="user not found or Invalid login details.";
        echo json_encode($response);
        exit;
    }else{
        $user = mysqli_fetch_assoc($result);
        $response["error"] = FALSE;
        $response["message"] = "Successfully logged in.";
        $response["user"] = $user;
        echo json_encode($response);
        exit;
    }
}else {
    // Invalid parameters
    $response["error"] = TRUE;
    $response["message"] ="Invalid parameters";
    echo json_encode($response);
    exit;
}
?>

You can try running this code using postman.

Signup
Signup API
login api
Login API

The most important parameter is the type which actually helps to differentiate between login and signup APIs.

This is all we need to do on the server side now we need to start working on Android App using Android Studio.

4. Create a New Android Studio Project

loginsignup project
login signup project

Add the following code to colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#d11617</color>
    <color name="colorPrimaryDark">#B31718</color>
    <color name="colorAccent">#FF4081</color>
    <color name="white">#FFFFFF</color>
</resources>

After creating and new Android Studio Project now we need to create 4 more activities.

  • SplashActivity
  • LoginActivity
  • SignupActivity
  • HomeActivity

5. AndroidManifest.xml INTERNET Permissions

    <uses-permission android:name="android.permission.INTERNET"/>

6. Third-party libraries Loopj & Picasso.

We will use loopj to access data from URL and Picasso to load images from URL in build.gradle (Module: app)

implementation 'com.loopj.android:android-async-http:1.4.9'
implementation 'com.squareup.picasso:picasso:2.5.2'

Module: App complete code

apply plugin: 'com.android.application'
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.tutorialscache.loginsignup"
        minSdkVersion 14
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:support-annotations:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.loopj.android:android-async-http:1.4.9'
    implementation 'com.squareup.picasso:picasso:2.5.2'
}

7. GlobalClass.java

Create a new class GlobalClass and extend it with Application. This class instance will help us to access the BASE URL and also gives us an application instance.

import android.app.Application;
public class GlobalClass extends Application {
    public static final String BASE_URL = "http://192.168.18.8:8888/androidApp/api.php";
//    public static final String BASE_URL = "http:/localhost:8888/androidApp/api.php";
    private static GlobalClass singleton;
    @Override
    public void onCreate() {
        super.onCreate();
        singleton = this;
    }
    public static GlobalClass getInstance() {
        return singleton;
    }
}

To launch GlobalClass at the start of the application add the application name in the name attribute in <application> of AndroidManifest.xml

<application 
android:name=".GlobalClass"

8. WebReq.java

Create a new Class name WebReq and follow the code. WebReq class is used to send requests on the server. It has a GET/POST Method to return JSON data from a given URL.

package com.tutorialscache.loginsignup;
import android.content.Context;
import android.util.Log;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.RequestParams;
import com.loopj.android.http.ResponseHandlerInterface;
public class WebReq {
    public static AsyncHttpClient client;
    static{
        //create object of loopj client
        //443 will save you from ssl exception
        client = new AsyncHttpClient(true,80,443);
    }
    public static void get(Context context, String url, RequestParams params, ResponseHandlerInterface responseHandler) {
        client.get(context, getAbsoluteUrl(url), params, responseHandler);
    }
    //concatenation of base url and file name
    private static String getAbsoluteUrl(String relativeUrl) {
        Log.d("response URL: ",GlobalClass.getInstance().BASE_URL + relativeUrl+" ");
        return GlobalClass.getInstance().BASE_URL + relativeUrl;
    }
    public static void post(Context context, String url, RequestParams params, ResponseHandlerInterface responseHandler) {
        client.post(context, getAbsoluteUrl(url), params, responseHandler);
    }
}

9. AndroidManifest.xml Intent Filter

Intent-Filter (intent-filter) is used to make the specific activities as launcher activity. By adding intent-filter inside SplashActvity this will become our launcher activity and will run at the start of the application.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tutorialscache.loginsignup">
    <uses-permission android:name="android.permission.INTERNET"/>
    <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=".MainActivity"></activity>
        <activity
            android:name=".SplashActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".LoginActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".SignupActivity"
            android:screenOrientation="portrait" />
        <activity android:name=".HomeActivity"
            android:screenOrientation="portrait"></activity>
    </application>
</manifest>

10. MainActivity.java

MainActivity class will be used as a parent activity to all other activities in the app so as a result, we will access to MainActivity methods.

package com.tutorialscache.loginsignup;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v4.app.NavUtils;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import com.loopj.android.http.AsyncHttpClient;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MainActivity extends AppCompatActivity {
    Context context;
    Intent intent;
    SharedPreferences sharedPreferences;
    String SHARED_PREF_NAME ="user_pref";
    SharedPreferences.Editor sharedPrefEditor;
    protected String name,email,password;
    protected boolean isLoggedIn(){
        return sharedPreferences.getBoolean("login",false);
    }
    protected void logout(){
        sharedPrefEditor.putBoolean("login",false);
        sharedPrefEditor.apply();
        sharedPrefEditor.commit();
    }
    public static boolean isEmailValid(String email) {
        String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
        Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }
    public void init() {
        sharedPreferences = getSharedPreferences(SHARED_PREF_NAME,MODE_PRIVATE);
        sharedPrefEditor = sharedPreferences.edit();
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                finish();
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

11. activity_home.xml

Add the following code in its activity_home.xml file.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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.tutorialscache.loginsignup.HomeActivity">
    <TextView
        android:id="@+id/nameTv"
        android:text="Name"
        android:textSize="22dp"
        android:textStyle="bold"
        android:gravity="center_horizontal"
        android:layout_centerVertical="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/emailTv"
        android:layout_below="@id/nameTv"
        android:text="e@e.com"
        android:textSize="22dp"
        android:gravity="center_horizontal"
        android:layout_centerVertical="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/logoutBtn"
        android:text="Logout"
        android:textAllCaps="false"
        android:background="#fa0e3d"
        android:textColor="#FFFFFF"
        android:layout_marginTop="40dp"
        android:layout_below="@id/emailTv"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

12. HomeActivity.java

package com.tutorialscache.loginsignup;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class HomeActivity extends MainActivity {
    TextView nameTv;
    TextView emailTv;
    Button logoutbtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().setTitle("Home");
        context = this;
        init();
        setContentView(R.layout.activity_home);
        //link views
        getViews();
    }
    private void getViews() {
        nameTv = findViewById(R.id.nameTv);
        nameTv.setText(sharedPreferences.getString("name",""));
        emailTv = findViewById(R.id.emailTv);
        emailTv.setText(sharedPreferences.getString("email",""));
        logoutbtn = findViewById(R.id.logoutBtn);
        //make logout
        logoutbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Redirect back to login page
                logout();
                intent = new Intent(context,LoginActivity.class);
                //remove all previous stack activities
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                finish();
            }
        });
    }
}

13. activity_splash.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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.tutorialscache.loginsignup.SplashActivity">
    <ProgressBar
        android:id="@+id/mPb"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:text="@string/app_name"
        android:gravity="center_horizontal"
        android:layout_below="@+id/mPb"
        android:textSize="22dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>

14. SplashActivity.java

package com.tutorialscache.loginsignup;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.util.Timer;
import java.util.TimerTask;
public class SplashActivity extends MainActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        init();
        setContentView(R.layout.activity_splash);
        // 5 seconds pause on splash page
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                if(isLoggedIn()){
                    //Redirect to home page
                    intent = new Intent(context,HomeActivity.class);
                    startActivity(intent);
                    finish();
                }else{
                    //Redirect to Login Page
                    intent = new Intent(context,LoginActivity.class);
                    startActivity(intent);
                    finish();
                }
            }
        },5000);
    }
    private void init() {
        context = this;
        sharedPreferences = context.getSharedPreferences(SHARED_PREF_NAME,MODE_PRIVATE);
    }
}

15. activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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.tutorialscache.loginsignup.LoginActivity">
    <TextView
        android:id="@+id/titleTv"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="120dp"
        android:text="Login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:id="@+id/emailEt"
        android:layout_below="@id/titleTv"
        android:layout_centerHorizontal="true"
        android:ems="11"
        android:hint="Email"
        android:inputType="textEmailAddress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:id="@+id/passwordEt"
        android:layout_below="@id/emailEt"
        android:layout_centerHorizontal="true"
        android:ems="11"
        android:hint="Password"
        android:inputType="number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/loginBtn"
        android:text="Login"
        android:layout_marginTop="15dp"
        android:layout_centerHorizontal="true"
        android:background="#fa0e3d"
        android:textColor="#FFFFFF"
        android:layout_below="@id/passwordEt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/signupNowTv"
        android:gravity="right"
        android:textColor="#fa0e5d"
        android:padding="5dp"
        android:layout_below="@id/loginBtn"
        android:layout_marginTop="20dp"
        android:text="Don't have an acccount ? Signup Now ?"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>

14. LoginActivity.java

package com.tutorialscache.loginsignup;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import com.loopj.android.http.ResponseHandlerInterface;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import cz.msebera.android.httpclient.Header;
public class LoginActivity extends MainActivity {
    EditText emailEt,passwordEt;
    Button loginBtn;
    TextView signupNowTv;
    String email,password;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context=this;
        setContentView(R.layout.activity_login);
        init();
        getViews();
    }
    private void getViews() {
        emailEt = findViewById(R.id.emailEt);
        signupNowTv = findViewById(R.id.signupNowTv);
        passwordEt = findViewById(R.id.passwordEt);
        loginBtn = findViewById(R.id.loginBtn);
        loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                loginValidation();
            }
        });
        signupNowTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                intent = new Intent(context,SignupActivity.class);
                startActivity(intent);
            }
        });
    }
    private void loginValidation() {
        email = emailEt.getText().toString();
        password = passwordEt.getText().toString();
        if (email.length()==0){
            Toast.makeText(context,"Invalid Email Address",Toast.LENGTH_SHORT).show();
            return;
        }
        if (isEmailValid(email)==false){
            Toast.makeText(context,"Invalid Email Address",Toast.LENGTH_SHORT).show();
            return;
        }
        if (password.length()<5){
            Toast.makeText(context,"Minimum password length should be 5 characters.",Toast.LENGTH_SHORT).show();
            return;
        }
        //all inputs are validated now perform login request
        RequestParams params = new RequestParams();
        params.add("type","login");
        params.add("email",email);
        params.add("password",password);
        WebReq.get(context, "api.php", params, new LoginActivity.ResponseHandler());
    }
    private void init() {
        context =this;
        sharedPreferences = getSharedPreferences(SHARED_PREF_NAME,MODE_PRIVATE);
        sharedPrefEditor = sharedPreferences.edit();
    }
    private class ResponseHandler extends JsonHttpResponseHandler {
        @Override
        public void onStart() {
            super.onStart();
        }
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
            super.onSuccess(statusCode, headers, response);
            Log.d("response ",response.toString()+" ");
            try {
                if (response.getBoolean("error")){
                    // failed to login
                    Toast.makeText(context,response.getString("message"),Toast.LENGTH_SHORT).show();
                }else{
                    // successfully logged in
                    JSONObject user = response.getJSONObject("user");
                    //save login values
                    sharedPrefEditor.putBoolean("login",true);
                    sharedPrefEditor.putString("id",user.getString("id"));
                    sharedPrefEditor.putString("name",user.getString("name"));
                    sharedPrefEditor.putString("email",user.getString("email"));
                    sharedPrefEditor.apply();
                    sharedPrefEditor.commit();
                    
                    //Move to home activity
                    intent = new Intent(context,HomeActivity.class);
                    startActivity(intent);
                    finish();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        @Override
        public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
            super.onFailure(statusCode, headers, responseString, throwable);
        }
        @Override
        public void onFinish() {
            super.onFinish();
        }
    }
}

15. activity_signup.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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"
    android:background="@color/colorPrimary"
    tools:context="com.tutorialscache.loginsignup.LoginActivity">
    <TextView
        android:id="@+id/titleTv"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="120dp"
        android:text="Signup"
        android:textSize="20dp"
        android:textColor="@color/white"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:id="@+id/nameEt"
        android:layout_below="@id/titleTv"
        android:layout_centerHorizontal="true"
        android:ems="11"
        android:background="@color/white"
        android:padding="8dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:hint="Name"
        android:inputType="text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:id="@+id/emailEt"
        android:layout_below="@id/nameEt"
        android:layout_centerHorizontal="true"
        android:ems="11"
        android:background="@color/white"
        android:padding="8dp"
        android:hint="Email"
        android:layout_marginBottom="10dp"
        android:inputType="textEmailAddress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <EditText
        android:id="@+id/passwordEt"
        android:layout_below="@id/emailEt"
        android:layout_centerHorizontal="true"
        android:ems="11"
        android:background="@color/white"
        android:padding="8dp"
        android:hint="Password"
        android:inputType="numberPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/SignupBtn"
        android:text="Signup"
        android:textAllCaps="false"
        android:layout_marginTop="15dp"
        android:layout_centerHorizontal="true"
        android:background="@color/white"
        android:textColor="@color/colorPrimary"
        android:layout_below="@id/passwordEt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/LoginNowTv"
        android:gravity="right"
        android:textColor="@color/white"
        android:padding="5dp"
        android:layout_below="@id/SignupBtn"
        android:layout_marginTop="20dp"
        android:text="Already have an acccount ? Login ?"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>

16. SignupActivity.java

package com.tutorialscache.loginsignup;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import org.json.JSONException;
import org.json.JSONObject;
import cz.msebera.android.httpclient.Header;
public class SignupActivity extends MainActivity {
    EditText nameEt,emailEt,passwordEt;
    Button signupBtn;
    TextView LoginNowTv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().setTitle("Registration");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        context = this;
        init();
        setContentView(R.layout.activity_signup);
        getViews();
    }
    public void getViews() {
        nameEt = findViewById(R.id.nameEt);
        emailEt = findViewById(R.id.emailEt);
        passwordEt = findViewById(R.id.passwordEt);
        signupBtn = findViewById(R.id.SignupBtn);
        LoginNowTv = findViewById(R.id.LoginNowTv);
        signupBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                signupValidation();
            }
        });
        LoginNowTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }
    private void signupValidation() {
        name = nameEt.getText().toString();
        email = emailEt.getText().toString();
        password = passwordEt.getText().toString();
        if (name.length()<3){
            Toast.makeText(context,"Name at least 3 characters.",Toast.LENGTH_SHORT).show();
            return;
        }
        if (email.length()==0){
            Toast.makeText(context,"Invalid Email Address",Toast.LENGTH_SHORT).show();
            return;
        }
        if (isEmailValid(email)==false){
            Toast.makeText(context,"Invalid Email Address",Toast.LENGTH_SHORT).show();
            return;
        }
        if (password.length()<5){
            Toast.makeText(context,"Minimum password length should be 5 characters.",Toast.LENGTH_SHORT).show();
            return;
        }
        //all inputs are validated now perform login request
        RequestParams params = new RequestParams();
        params.add("type","signup");
        params.add("name",name);
        params.add("email",email);
        params.add("password",password);
        WebReq.post(context, "api.php", params, new SignupActivity.ResponseHandler());
    }
    private class ResponseHandler extends JsonHttpResponseHandler {
        @Override
        public void onStart() {
            super.onStart();
        }
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
            super.onSuccess(statusCode, headers, response);
            Log.d("response ",response.toString()+" ");
            try {
                if (response.getBoolean("error")){
                    // failed to login
                    Toast.makeText(context,response.getString("message"),Toast.LENGTH_SHORT).show();
                }else{
                    // successfully logged in
                    JSONObject user = response.getJSONObject("user");
                    //save login values
                    sharedPrefEditor.putBoolean("login",true);
                    sharedPrefEditor.putString("id",user.getString("id"));
                    sharedPrefEditor.putString("name",user.getString("name"));
                    sharedPrefEditor.putString("email",user.getString("email"));
                    sharedPrefEditor.apply();
                    sharedPrefEditor.commit();
                    //Move to home activity
                    intent = new Intent(context,HomeActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
                    finish();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        @Override
        public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
            super.onFailure(statusCode, headers, responseString, throwable);
        }
        @Override
        public void onFinish() {
            super.onFinish();
        }
    }
}

Download Source Code
androiddatabaseloginphpserversqlstorage

Related Posts

google play store

Are Google Play Store Services Going to be Banned in Pakistan?

November 27, 2022
MVP Design Pattern

MVP Design Pattern Android Tutorial

January 20, 2020
MVVM Tutorial

MVVM Design Pattern in Android

January 15, 2020

Comments are closed.

  • search here
  • Categories
    • Android (16)
    • Business (7)
    • Freelancing (14)
    • IOS (4)
    • Technology (6)
    • Uncategorized (1)
    • Web development (7)
  • we are social
    Tutorialscache
  • Popular tutorials
    • gender gap in tech
      Women in Tech: How to Remove the Gender Gap
      February 25, 2023
    • freelancer
      How to Start Freelancing Even When Working Full-Time
      February 19, 2023
    • make money on tiktok
      How to Make Money on TikTok
      February 13, 2023
    • workers
      Why Coding is an Essential Skill For an IT Job
      February 8, 2023
    • programmer
      The Best Online Coding Courses in 2023
      February 2, 2023
    • freelancer is working
      Who Is a Freelancer and How Do You Become?
      January 26, 2023
    • technology company
      Tech Layoff 2023- Google is Cutting 12,000 Jobs
      January 21, 2023
    • demanding freelance skills
      Top 9 Most Demanding Freelance Skills in 2023
      January 14, 2023
    • twitter
      How to Download Tweets From Twitter
      January 9, 2023
    • Text messages on iphone
      How to Recover Deleted Text Messages On iPhone
      January 3, 2023
  • copyright © 2019 TutorialCache Pvt Ltd
  • Facebook
  • Twitter
  • YouTube
  • LinkedIn
  • Home
  • Android
  • IOS
  • Freelancing
  • Business
  • Web Development
  • Hire Us
  • Other Pages
    • About Us
    • Contact US
    • Privacy Policy
    • Disclaimer