Send data from android to server via JSON

  1. I have MySQL database server
  2. I need to update and retrieve data to/from MySQL server via JSON

So, I want to know how to do that, and I pretty confuse with this example statement:

HttpPost httppost = new HttpPost("http://10.0.2.2/city.php");

This means I need to code my application that connect with PHP server before write php to connect to DB right ?


To send data to server you could do this:

private void sendData(ArrayList<NameValuePair> data)
{
     // 1) Connect via HTTP. 2) Encode data. 3) Send data.
    try
    {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new      
        HttpPost("http://www.blah.com/AddAccelerationData.php");
        httppost.setEntity(new UrlEncodedFormEntity(data));
        HttpResponse response = httpclient.execute(httppost);
        Log.i("postData", response.getStatusLine().toString());
            //Could do something better with response.
    }
    catch(Exception e)
    {
        Log.e("log_tag", "Error:  "+e.toString());
    }  
}

then to send lets say:

private void sendAccelerationData(String userIDArg, String dateArg, String timeArg,
        String timeStamp, String accelX, String accelY, String accelZ)
{
    fileName = "AddAccelerationData.php";

    //Add data to be send.
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(7);
    nameValuePairs.add(new BasicNameValuePair("userID", userIDArg));
    nameValuePairs.add(new BasicNameValuePair("date",dateArg));
    nameValuePairs.add(new BasicNameValuePair("time",timeArg));
    nameValuePairs.add(new BasicNameValuePair("timeStamp",timeStamp));

    nameValuePairs.add(new BasicNameValuePair("accelX",accelX));
    nameValuePairs.add(new BasicNameValuePair("accelY",accelY));
    nameValuePairs.add(new BasicNameValuePair("accelZ",accelZ));

    this.sendData(nameValuePairs);
}

so then the AddAccelerationData.php file on server is:

<?php
/*
 * What this file does is it:
 * 1) Creates connection to database.
 * 2) Retrieve the data being send.
 * 3) Add the retrieved data to database 'Data'.
 * 4) Close database connection.
 */
require_once '../Connection.php'; //connect to a database/disconnect handler.
require_once '../SendAPI.php'; //deals with sending querys.

$server = new Connection();
$send = new Send();

//Connect to database.
$server->connectDB();

//Retrieve the data.
$userID = $_POST['userID'];
$date = $_POST['date'];
$time = $_POST['time'];

$accelX = $_POST['accelX'];
$accelY = $_POST['accelY'];
$accelZ = $_POST['accelZ'];

//Add data to database 'Data'. //Personal method to query and add to database.
$send->sendAccelerationData($userID, $date, $time, $timeStamp, $accelX, $accelY, $accelZ);


//Disconnect from database.
$server->disconnectDB();
?>

This is an example I used recently. Just to note in the php file. I import Connection.php this just deals with the connection to the database. So just replace that with your code for connecting to MYSQL db. Also I imported SendAPI.php (which you can just ignore)This was just my class for sending data. Basically it contained some of the querys I wanted to use. Such as sendAccelerationData(). Basically class was similar to that of stored procedures.


You do need to update and retrieve through JSON ? If this is the case, you'll probably have to code some Web Service and such, (it won't necessarily be in PHP, could be Java, C#, whatever)

Look at this thread, it seem there is no way you can access MySql server directly from android, so indeed, you may need some Web development implement the JSON/XML middle layer to connect with android.

Thread @ StackOverFlow Android + MySQL using com.mysql.jdbc.Driver


Since an Android application cannot connect directly to a MySQL server you need to write a kind of a "bridge".

UPDATE: @see Femi's comment

Well, technically speaking, It could: http://developer.android.com/reference/javax/sql/package-summary.html

But for security reasons a bridge is a mandatory choice IMHO.

One one the most popular approach is to use the http protocol for sending and reading data.

Your city.php will contain the logic for connect and querying the database:

<?php
$db = mysql_connect(....);
//query...
echo json_encode($data);
?>

The Android app will connect trough your server and will parse the json output.

So yes, you need to write the server-side part and client side part (Android)

A really useful video: http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html

Code sample with PHP as bridge and Android via http protocol:

http://www.helloandroid.com/tutorials/connecting-mysql-database