Click here to Skip to main content
11,705,208 members (41,193 online)
Click here to Skip to main content

Send and Receive JSON between Android and PHP Web Service

, 12 Oct 2011 CPOL 345.9K 42.7K 97
Rate this:
Please Sign up or sign in to vote.
Set and get data via PHP Web Service between Android and PHP

Introduction

You are creating an Android app and want to read data from a MySQL database and send data. We will create a Web Service in PHP, read from the MySQL database, and let the Android connect with the Web Service and send data, and the Web Service will save it and another Web Service will read data from MySQL and send it to the Android app.

Using the Code

First, we have to create the Web service to read data from the MySQL database.

<?php  
<pre>/* require the user as the parameter */
<pre>//http://localhost:8080/sample1/webservice1.php?user=1
if(isset($_GET['user']) && intval($_GET['user'])) {
  /* soak in the passed variable or set our own */
  $number_of_posts = isset($_GET['num']) ? intval($_GET['num']) : 10; //10 is the default
  $format = strtolower($_GET['format']) == 'json' ? 'json' : 'xml'; //xml is the default
  $user_id = intval($_GET['user']); //no default
  /* connect to the db */
  $link = mysql_connect('localhost','root','123456') or die('Cannot connect to the DB');
  mysql_select_db('TEST',$link) or die('Cannot select the DB');
  /* grab the posts from the db */
  //$query = "SELECT post_title, guid FROM wp_posts WHERE post_author = 
  //  $user_id AND post_status = 'publish' ORDER BY ID DESC LIMIT $number_of_posts";
  $query = "SELECT * FROM `test`.`users`;";
  $result = mysql_query($query,$link) or die('Errant query:  '.$query);
  /* create one master array of the records */
  $posts = array();
  if(mysql_num_rows($result)) {
    while($post = mysql_fetch_assoc($result)) {
      $posts[] = array('post'=>$post);
    }
  }
  /* output in necessary format */
  if($format == 'json') {
    header('Content-type: application/json');
    echo json_encode(array('posts'=>$posts));
  }
  else {
    header('Content-type: text/xml');
    echo '';
    foreach($posts as $index => $post) {
      if(is_array($post)) {
        foreach($post as $key => $value) {
          echo '<',$key,'>';
          if(is_array($value)) {
            foreach($value as $tag => $val) {
              echo '<',$tag,'>',htmlentities($val),'</',$tag,'>';
            }
          }
          echo '</',$key,'>';
        }
      }
    }
    echo '';
  }
  /* disconnect from the db */
  @mysql_close($link);
}
?>

Here is the code for the Android activity to read from the Web Service and parse the JSON object:

public void clickbutton(View v) {
    try {
        // http://androidarabia.net/quran4android/phpserver/connecttoserver.php

        // Log.i(getClass().getSimpleName(), "send  task - start");
        HttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams,
                TIMEOUT_MILLISEC);
        HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
        //
        HttpParams p = new BasicHttpParams();
        // p.setParameter("name", pvo.getName());
        p.setParameter("user", "1");

        // Instantiate an HttpClient
        HttpClient httpclient = new DefaultHttpClient(p);
        String url = "http://10.0.2.2:8080/sample1/" + 
                     "webservice1.php?user=1&format=json";
        HttpPost httppost = new HttpPost(url);

        // Instantiate a GET HTTP method
        try {
            Log.i(getClass().getSimpleName(), "send  task - start");
            //
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                    2);
            nameValuePairs.add(new BasicNameValuePair("user", "1"));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            String responseBody = httpclient.execute(httppost,
                    responseHandler);
            // Parse
            JSONObject json = new JSONObject(responseBody);
            JSONArray jArray = json.getJSONArray("posts");
            ArrayList<HashMap<String, String>> mylist = 
                   new ArrayList<HashMap<String, String>>();

            for (int i = 0; i < jArray.length(); i++) {
                HashMap<String, String> map = new HashMap<String, String>();
                JSONObject e = jArray.getJSONObject(i);
                String s = e.getString("post");
                JSONObject jObject = new JSONObject(s);

                map.put("idusers", jObject.getString("idusers"));
                map.put("UserName", jObject.getString("UserName"));
                map.put("FullName", jObject.getString("FullName"));

                mylist.add(map);
            }
            Toast.makeText(this, responseBody, Toast.LENGTH_LONG).show();

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // Log.i(getClass().getSimpleName(), "send  task - end");

    } catch (Throwable t) {
        Toast.makeText(this, "Request failed: " + t.toString(),
                Toast.LENGTH_LONG).show();
    }
}

Here is the PHP code to send data to the Web Service and save it:

<?php  
//$json=$_GET ['json'];
$json = file_get_contents('php://input');
$obj = json_decode($json);
//echo $json;

//Save
$con = mysql_connect('localhost','root','123456') 
       or die('Cannot connect to the DB');
mysql_select_db('TEST',$con);
  /* grab the posts from the db */
  //$query = "SELECT post_title, guid FROM wp_posts WHERE 
  //  post_author = $user_id AND post_status = 'publish'
  // ORDER BY ID DESC LIMIT $number_of_posts";
mysql_query("INSERT INTO `test`.`users` (UserName, FullName)
VALUES ('".$obj->{'UserName'}."', '".$obj->{'FullName'}."')");
mysql_close($con);
//
  //$posts = array($json);
  $posts = array(1);
    header('Content-type: application/json');
    echo json_encode(array('posts'=>$posts)); 
  ?>

Android activity to send data to the Web Service as a JSON object to save in the MySQL database:

public void clickbuttonRecieve(View v) {
    try {
        JSONObject json = new JSONObject();
        json.put("UserName", "test2");
        json.put("FullName", "1234567");
        HttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams,
                TIMEOUT_MILLISEC);
        HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
        HttpClient client = new DefaultHttpClient(httpParams);
        //
        //String url = "http://10.0.2.2:8080/sample1/webservice2.php?" + 
        //             "json={\"UserName\":1,\"FullName\":2}";
        String url = "http://10.0.2.2:8080/sample1/webservice2.php";

        HttpPost request = new HttpPost(url);
        request.setEntity(new ByteArrayEntity(json.toString().getBytes(
                "UTF8")));
        request.setHeader("json", json.toString());
        HttpResponse response = client.execute(request);
        HttpEntity entity = response.getEntity();
        // If the response does not enclose an entity, there is no need
        if (entity != null) {
            InputStream instream = entity.getContent();

            String result = RestClient.convertStreamToString(instream);
            Log.i("Read from server", result);
            Toast.makeText(this,  result,
                    Toast.LENGTH_LONG).show();
        }
    } catch (Throwable t) {
        Toast.makeText(this, "Request failed: " + t.toString(),
                Toast.LENGTH_LONG).show();
    }
}

Points of Interest

To connect to your emulator, you can use this link: http://10.0.2.2:8080/

To read the JSON object in the Web Service, you can use this line of code:

$json = file_get_contents('php://input');
$obj = json_decode($json);

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Hamdy Ghanem
Software Developer (Senior)
Egypt Egypt
Hamdy Ghanem
Senior Software Engineer / System Architect
Experience: +11 years
http://www.linkedin.com/in/hamdyghanem
hamdy.ghanem@gmail.com
Graduated from Munifia University, faculty of science, Math and computer science department May 1999

Experience Brief
11+ years of experience in software development field.
In these years I used most of common software developing tools of Microsoft, And with many nationalities and cultures.
I worked in large scale projects of client side, desktop, web application and mobile phones that involved integration with other system using different technologies I've been working using .NET technologies for 8 years.
Currently, I work as a senior software engineer for CogWin as well as a testing/QA consultant. We develop large scale applications for a high profile customer.
Beside developing and managing, I worked in the last year as a professional tester from developer point of view and applying software evaluation metrics on source code and reverse engineering.
I worked as a team leader more than four years
My experience involved using agile methodology using team foundation server
from 1year I am very interested in Android development
I have a published some applications in the Android Market

Strong skills troubleshooting and debugging production systems are essential
My key skills
High performance, hard worker and new technologies enthusiast
Specialties
C#,VB.net, C++, Java ,php, Python , OOP SQL Server (2000, 2005, 2008),Oracle, Mysql , Java , SSRS ,Source safe, Ontology, Android, ASP.NET ,Ajax, • WPF,WCF, Entity Framework, LINQ, CFG , state machine , Ontology, Decision Tree , Cloud Systems, CRM ,JavaScript, XML, UML, Crystal report , LINQ, Silverlight

You may also be interested in...

Comments and Discussions

 
QuestionSend bulk data to web server. Pin
Member 1109450519-Sep-14 0:34
memberMember 1109450519-Sep-14 0:34 
QuestionAbout Editing Or Deleting Or Modifying Pin
Hercules4486-Aug-14 0:50
memberHercules4486-Aug-14 0:50 
GeneralMy vote of 3 Pin
xfzheng27-May-14 15:01
memberxfzheng27-May-14 15:01 
GeneralMy vote of 3 Pin
Member 1063458718-May-14 0:13
memberMember 1063458718-May-14 0:13 
BugDatabase detail Pin
creatorb7-Apr-14 4:16
membercreatorb7-Apr-14 4:16 
QuestionError converting result java.lang.nullpointerexception, error parsing data org.json.JSONEception. Pin
Cyber1226-Feb-14 21:06
memberCyber1226-Feb-14 21:06 
Questionhow to recive data using webservice.net to andorid expandable listview Pin
beniv11-Nov-13 4:19
memberbeniv11-Nov-13 4:19 
AnswerRe: how to recive data using webservice.net to andorid expandable listview Pin
creatorb7-Apr-14 4:12
membercreatorb7-Apr-14 4:12 
Questionthanksss Pin
Riza Savina28-Oct-13 21:09
memberRiza Savina28-Oct-13 21:09 
QuestionJSONException: Value Errant of type java.lang.String cannot be converted to JSONObject Pin
Member 1016646930-Jul-13 23:15
memberMember 1016646930-Jul-13 23:15 
AnswerRe: JSONException: Value Errant of type java.lang.String cannot be converted to JSONObject Pin
ravi koradiya1-Apr-14 23:34
memberravi koradiya1-Apr-14 23:34 
GeneralMy vote of 2 Pin
prajapati_rakesh24-Jul-13 2:33
memberprajapati_rakesh24-Jul-13 2:33 
QuestionHttpHostConnectException - connection to localhost refused. Pin
Member 1014185810-Jul-13 0:48
memberMember 1014185810-Jul-13 0:48 
Bugerror Pin
Member 101418589-Jul-13 23:31
memberMember 101418589-Jul-13 23:31 
Questionerroe Pin
Member 101418589-Jul-13 23:11
memberMember 101418589-Jul-13 23:11 
QuestionRequest for web service Pin
Rajivvaddi12-Jun-13 1:54
memberRajivvaddi12-Jun-13 1:54 
Questionsockettimeout exception Pin
Member 1001597329-Apr-13 2:22
memberMember 1001597329-Apr-13 2:22 
AnswerRe: sockettimeout exception Pin
Hamdy Ghanem29-Apr-13 2:29
memberHamdy Ghanem29-Apr-13 2:29 
GeneralRe: sockettimeout exception Pin
Member 1001597330-Apr-13 0:21
memberMember 1001597330-Apr-13 0:21 
QuestionKOUKOU Pin
Member 999966319-Apr-13 6:21
memberMember 999966319-Apr-13 6:21 
QuestionNo Error but no functionality :-/ Pin
Member 968670118-Mar-13 9:39
memberMember 968670118-Mar-13 9:39 
AnswerRe: No Error but no functionality :-/ Pin
Hamdy Ghanem29-Apr-13 2:30
memberHamdy Ghanem29-Apr-13 2:30 
QuestionHttpHostConnectException - connection to localhost refused Pin
Nataliewater5-Mar-13 20:16
memberNataliewater5-Mar-13 20:16 
GeneralMy vote of 3 Pin
Paul Conrad31-Dec-12 9:20
memberPaul Conrad31-Dec-12 9:20 
GeneralRESPECT Pin
ahmed_red23-Nov-12 2:51
memberahmed_red23-Nov-12 2:51 
GeneralRe: RESPECT Pin
jo le serb9-May-13 11:37
memberjo le serb9-May-13 11:37 
QuestionUnproper use of setEntity and setHeader Pin
Ilian Nikolov10-Nov-12 14:23
memberIlian Nikolov10-Nov-12 14:23 
GeneralMy vote of 4 Pin
Fawwad Ali Khan8-Aug-12 20:51
memberFawwad Ali Khan8-Aug-12 20:51 
QuestionDatabase details Pin
mbs98931-Jul-12 21:51
membermbs98931-Jul-12 21:51 
Questionplz rly me fast Pin
yethendranaidu6-Jul-12 23:11
memberyethendranaidu6-Jul-12 23:11 
QuestionMissing file Pin
I Yeu1-Jul-12 8:30
memberI Yeu1-Jul-12 8:30 
AnswerRe: Missing file Pin
Szymon Woźniak11-Jul-12 2:14
memberSzymon Woźniak11-Jul-12 2:14 
Questioncertain errors i am facing Pin
Member 875988227-Mar-12 22:36
memberMember 875988227-Mar-12 22:36 
AnswerRe: certain errors i am facing Pin
Hamdy Ghanem27-Mar-12 22:41
memberHamdy Ghanem27-Mar-12 22:41 
GeneralRe: certain errors i am facing Pin
Member 875988227-Mar-12 23:04
memberMember 875988227-Mar-12 23:04 
GeneralRe: certain errors i am facing Pin
Hamdy Ghanem27-Mar-12 23:33
memberHamdy Ghanem27-Mar-12 23:33 
GeneralRe: certain errors i am facing Pin
Member 875988227-Mar-12 23:38
memberMember 875988227-Mar-12 23:38 
GeneralRe: certain errors i am facing Pin
Member 875988228-Mar-12 19:38
memberMember 875988228-Mar-12 19:38 
OK finally the code worked.. im getting this error when i want to receive data
Request Failed org.json.JSONException
Value <br of type java.lang.String cannot be converted to JSONObject
GeneralRe: certain errors i am facing Pin
Hamdy Ghanem28-Mar-12 20:05
memberHamdy Ghanem28-Mar-12 20:05 
GeneralRe: certain errors i am facing Pin
sangisuke20-Apr-12 16:57
membersangisuke20-Apr-12 16:57 
GeneralRe: certain errors i am facing Pin
sangisuke20-Apr-12 16:58
membersangisuke20-Apr-12 16:58 
GeneralRe: certain errors i am facing Pin
Hamdy Ghanem20-Apr-12 20:55
memberHamdy Ghanem20-Apr-12 20:55 
GeneralRe: certain errors i am facing Pin
sangisuke21-Apr-12 3:26
membersangisuke21-Apr-12 3:26 
GeneralRe: certain errors i am facing Pin
Hamdy Ghanem21-Apr-12 3:30
memberHamdy Ghanem21-Apr-12 3:30 
GeneralRe: certain errors i am facing Pin
sangisuke21-Apr-12 3:50
membersangisuke21-Apr-12 3:50 
GeneralRe: certain errors i am facing Pin
Hamdy Ghanem21-Apr-12 3:50
memberHamdy Ghanem21-Apr-12 3:50 
GeneralRe: certain errors i am facing Pin
sangisuke21-Apr-12 3:54
membersangisuke21-Apr-12 3:54 
GeneralRe: certain errors i am facing Pin
Hamdy Ghanem21-Apr-12 4:01
memberHamdy Ghanem21-Apr-12 4:01 
GeneralRe: certain errors i am facing Pin
sangisuke21-Apr-12 4:11
membersangisuke21-Apr-12 4:11 
GeneralMy vote of 4 Pin
dimsovantheany18-Mar-12 18:19
memberdimsovantheany18-Mar-12 18:19 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.150819.1 | Last Updated 12 Oct 2011
Article Copyright 2011 by Hamdy Ghanem
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid