In the previous tutorial, you have learned the very basics of Web Services in Android. 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.

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

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
1 2 3 4 5 6 7 |
<?php define('HOST','localhost'); define('USER','database_username'); define('PASS','database_password'); define('DB','database_name'); $con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect'); |
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.
insertData.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?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'; } ?> |
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://beginnersheap.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.
1 2 3 4 5 |
<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.
1 |
compile 'com.mcxiaoke.volley:library-aar:1.0.0' |
The complete dependencies code will be.
1 2 3 4 5 6 |
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.

The Complete Code for User Interface of Volley Project
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
<?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
1 2 3 |
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.
1 2 3 |
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.
1 2 3 4 |
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(); |
Request Methods
Create a StringRequest listener which will override onResponse() and onErrorResponse() methods along with getParams() method which return a HashMap containing key-value pair.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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
1 2 |
RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(stringRequest); |

These user credentials will be saved into MySQL database.

Complete Code for ActivityMain.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
package 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"; 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); } } |
Hope you like this tutorial, Stay tuned for more upcoming tutorials. Stay blessed!
very easy and understandable really it helps me
What if you have more than two fields?