ANDROID PHP MYSQL WITH Volley Library

In this tutorial, you will learn how to populate MySQL database using POST request method. You will also learn the utilization of the Volley Library in Android.

Introduction to Volley

The Volley is a modern HTTP networking library for Android which provides a faster and an easier way of communication with the web server for data synchronization.

How it Works?

In Android, the Volley library makes a request to the web server for data synchronization. It is similar to the three-way handshake; the Android application makes some HTTP request, and the server sends some response in return.

Getting Started with Volley

As we want to send some data to the webserver using POST request and store the data in MySQL. So the first thing you will need is MySQL Database on the web server.

There are multiple free web servers available. Hostinger.co.uk provides the best free domains and hosting, but unfortunately, it is not providing its services in Pakistan. Many of you think of going toward the base.pk for free domain and hosting. I suggest you not to use base.pk as it generates an unknown JavaScript error. It may waste a lot of your time. This JavaScript error is generated due to Ads as well as some data parsing which comes as a response from the web server. A better option is to buy your domain and hosting to save time.

Creating MySQL Database

After logging into your hosting CPanel, find and open MySQL Databases and create a new database as required. Also, set up and assign a privileged user to perform operations on the database.

Create and assign users to the database
Create and assign users to the database

Now add tables to the database and add columns/fields to the tables in MySQL from phpMyAdmin. 

Add Columns to MySQL Database
Add Columns to MySQL Database

Create a Database Connection File

You have successfully created the database. You need a PHP connection file which will help you to connect to the database to perform CRUD operations.

dbConnect.php

1234567

Right now you need the insertion of data in MySQL so only implement the Insert operation in a separate file which checks whether the requested method is a post method or not. If the requested method is POST, it gets the variables from the request and updates them in the database.

DatabaseConnection.php

 <?php
     define('HOST','localhost'); // Here Your Host Name Or Url
     define('USER','database_username'); // Here Your Host Database server User Name
     define('PASS','database_password'); // Here Your Host Database server Password    define('DB','database_name');
 
     $con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect');

insertData.php

<?php    require_once('dbConnect.php');     if($_SERVER['REQUEST_METHOD']=='POST'){        $username = $_POST['username'];        $email = $_POST['email'];                   $get_result = $con->query("INSERT INTO user(username,email) VALUES ('$username','$email')");          if($get_result === true){        echo "Successfully Registered";        }else{        echo $username."Not Registered";        }    }else{        echo 'error';    }?>
123456789101112131415161718

You have completed with the server side configurations; The directory path on the server for the insertData.php will act as the responder for the requests from Android application, as it checks the request method and executes the server side query for data insertion in the database. In my case the URL is

http://oleetech.com/android/insertData.php

Keep in mind that if your website has SSL certificate even then you must keep the URL http://example.com/insertData.php. Otherwise, it will generate the error.

Now move toward the Android Application.

Populate MySQL from Android Application using Volley

Before you start building the components of Android application, you must configure Volley library and its dependencies immediately after creating your Android application.

Adding Internet Permissions to Android Application

In the AndroidManifest.xml file, place the <uses-permission /> self closing tag between the <manifest> </manifest> tags, add internet permission.

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

 Including Volley Library to Android Application

Open the build.gradle (Module: App) add a dependency for Volley Library, inside dependencies block place a Volley library compile code.

compile 'com.mcxiaoke.volley:library-aar:1.0.0'

The complete dependencies code will be.

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.1.0'
    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
}

You have setup Volley, Sync Project to synchronize your build.gradle file with your project.

Setup User Interface for Getting Data from the User

Create the required User; I took username and email address as an example to send two Strings as a POST request.

Create text fields as required and a button to send the POST request for saving data in MySql.

Volley Project TextFields and Button
Volley Project TextFields and Button

The Complete Code for User Interface of Volley Project

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.muneeb.volleyproject.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Name"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="99dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Email"
        android:id="@+id/textView2"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="46dp" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/username"
        android:layout_alignTop="@+id/textView"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_toRightOf="@+id/textView"
        android:layout_toEndOf="@+id/textView" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:id="@+id/useremail"
        android:layout_alignTop="@+id/textView2"
        android:layout_alignRight="@+id/username"
        android:layout_alignEnd="@+id/username"
        android:layout_toRightOf="@+id/textView"
        android:layout_toEndOf="@+id/textView" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Register Data"
        android:id="@+id/button"
        android:layout_below="@+id/useremail"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="96dp"
        android:onClick="SendData"/>
</RelativeLayout>

Implement the onClick method for the button

public void SendData(View v){}

Use private static final fields for the URL and the column names as these fields must not change throughout the project.

I declared username and email as the column/fields name. So, I will declare URL, USERNAME and USEREMAIL as public static final with the class level scope.

private static final String URL = "http://beginnersheap.com/android/insertData.php";
public static final String USERNAME = "username";
public static final String USEREMAIL = "email";

Get Data From Text Fields

Before moving further you must get the values from the text fields which user entered.

Request Methods

final EditText userName=(EditText) findViewById(R.id.username);
final EditText userEmail=(EditText) findViewById(R.id.useremail);
final String username = userName.getText().toString().trim();
final String email = userEmail.getText().toString().trim();

Create a StringRequest listener which will override onResponse() and onErrorResponse() methods along with getParams() method which return a HashMap containing key-value pair.

          StringRequest stringRequest = new StringRequest(Request.Method.POST, URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        System.out.println(response);
                        Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
                    }
                }){
            @Override
            protected Map<String,String> getParams(){
                Map<String,String> params = new HashMap<String, String>();
                params.put(USERNAME,username);
                params.put(USEREMAIL, email);
                return params;
            }

        };

onResponse() method will returns the response from the web server and onErrorResponse() method will return the Volley errors.

Generate Requests and Add Request to the Queue

Generate the requests and add to RequestQueue

RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
Working Volley Library POST Request
Working Volley Library POST Request

These user credentials will be saved into MySQL database.

Data from Android in MySQL
Data from Android in MySQL

Complete Code for ActivityMain.java

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667package com.example.muneeb.volleyproject; import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.EditText;import android.widget.Toast; import com.android.volley.Request;import com.android.volley.RequestQueue;import com.android.volley.Response;import com.android.volley.VolleyError;import com.android.volley.toolbox.StringRequest;import com.android.volley.toolbox.Volley; import java.util.HashMap;import java.util.Map; public class MainActivity extends AppCompatActivity {     private static final String URL = “http://beginnersheap.com/android/insertData.php&#8221;;    public static final String USERNAME = “username”;    public static final String USEREMAIL = “email”;     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }      public void SendData(View v)    {        final EditText userName=(EditText) findViewById(R.id.username);        final EditText userEmail=(EditText) findViewById(R.id.useremail);        final String username = userName.getText().toString().trim();        final String email = userEmail.getText().toString().trim();         StringRequest stringRequest = new StringRequest(Request.Method.POST, URL,                new Response.Listener<String>() {                    @Override                    public void onResponse(String response) {                        System.out.println(response);                        Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();                    }                },                new Response.ErrorListener() {                    @Override                    public void onErrorResponse(VolleyError error) {                        Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();                    }                }){            @Override            protected Map<String,String> getParams(){                Map<String,String> params = new HashMap<String, String>();                params.put(USERNAME,username);                params.put(USEREMAIL, email);                return params;            }         };         RequestQueue requestQueue = Volley.newRequestQueue(this);        requestQueue.add(stringRequest);    } }