Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending Data From Android To Server with JSON data

Tags:

json

android

php

I am trying sending data from Android application to web server. My android application is working successfully.However php code have problems.

<?php
$json = $_SERVER['HTTP_JSON'];
echo "JSON: \n";
var_dump($json);
echo "\n\n";

$data = json_decode($json,true);
echo "Array: \n";
var_dump($data);
echo "\n\n";

$name = $data['name'];
$pos = $data['position'];
echo "Result: \n";
echo "Name     : ".$name."\n Position : ".$pos; 
?>

Errors:

Notice: Undefined index: HTTP_JSON in C:\wamp\www\jsonTest.php on line 2
( line 2 : $json = $_SERVER['HTTP_JSON']; )

I couldn't find these problems reason. Can you help me ? ( note: I am using wamp server )

Here is the relevant Android source:

// Create a new HttpClient and Post Header 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("10.0.2.2:90/jsonTest.php";); 

JSONObject json = new JSONObject(); 
try { 
    json.put("name", "flower"); 
    json.put("position", "student"); 
    JSONArray postjson=new JSONArray(); 
    postjson.put(json); 
    httppost.setHeader("json",json.toString());
    httppost.getParams().setParameter("jsonpost",postjson); 
    System.out.print(json); 
    HttpResponse response = httpclient.execute(httppost); 

    if(response != null)
    {
    InputStream is = response.getEntity().getContent();

    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        } catch (IOException e) {
        e.printStackTrace();
        } finally {
        try {
        is.close();
        } catch (IOException e) {
        e.printStackTrace();
        }
        }
    text = sb.toString();
    }
    tv.setText(text);

}catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
} catch (IOException e) {
    // TODO Auto-generated catch block
}

This code works successfully on android side(no error). But php side has problems.. Thanks.

like image 414
iremce Avatar asked Nov 29 '11 20:11

iremce


People also ask

How do I post JSON to the server?

To post JSON data to the server, we need to use the HTTP POST request method and set the correct MIME type for the body. The correct MIME type for JSON is application/json. In this POST JSON example, the Content-Type: application/json request header specifies the media type for the resource in the body.

How does REST API send JSON data?

To post JSON to a REST API endpoint, you must send an HTTP POST request to the REST API server and provide JSON data in the body of the POST message. You also need to specify the data type in the body of the POST message using the Content-Type: application/json request header.


2 Answers

This isn't where your JSON is:

$json = $_SERVER['HTTP_JSON'];

You possibly meant:

$json = $_POST['HTTP_JSON'];

Where HTTP_JSON is the POST variable name you gave to your JSON in your Android app.

The rest of the errors stem from the fact that json_decode is failing because you're not successfully reading the JSON data from the request. You can check the response of json_decode to check if it was successful as follows:

$data = json_decode($json,true);
if( $data === NULL)
{
    exit( 'Could not decode JSON');
}

Finally, passing true as the second parameter to json_encode means it will return an associative array, so you'd access elements like so:

$name = $data['name'];
$pos = $data['position'];

Make sure you read the docs for json_encode so you understand what it's doing.

Edit: Your problem is that you're accessing the $_POST parameter by the wrong name. You should be using:

$json = $_POST['jsonpost'];

Since the following line names the parameter "jsonpost":

httppost.getParams().setParameter("jsonpost",postjson);
like image 105
nickb Avatar answered Sep 24 '22 03:09

nickb


Since I don't know how the java client sends the request I would try :

print_r($_SERVER);
print_r($_GET);
print_r($_POST);

To figure out how it does.

like image 32
u.k Avatar answered Sep 23 '22 03:09

u.k