Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send json from android to php?

To post json from android to php, i used Volley library StringRequest object.

StringRequest sr = new StringRequest(Request.Method.POST,url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                // some code
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //some code
            }
        }){
            @Override
            protected Map<String,String> getParams(){
                Map<String, String> params = new HashMap<String, String>();
                ArrayList<Command> commands = MyApplication.readFromPreferences(getActivity(), Constants.COMMAND);
                String jsonCommands = new Gson().toJson(commands);
                params.put("commands", jsonCommands);
                return params;
            }
        };

And to catch the data in php and verify if it was sent correcttly, I used this

echo $_POST["commands"]; 

Output:

[{\"product\":{\"category_id\":1,\"created_at\":\"2015-06-13 17:49:58\",\"description\":\"CF77 COIN FINDER\",\"url_image\":\"IMG_76ECDC-707E7E-70AC81-0A1248-4675F3-F0F783.jpg\",\"name\":\"CF77 COIN FINDER\",\"pid\":12,\"price\":500.0},\"product_quantity\":3},{\"product\":{\"category_id\":1,\"created_at\":\"2015-06-13 17:49:58\",\"description\":\"JEOSONAR 3D DUAL SYSTEM\",\"url_image\":\"IMG_2D9DF0-2EB7E9-ED26C0-2C833B-B6A5C5-5C7C02.jpg\",\"name\":\"JEOSONAR 3D DUAL SYSTEM\",\"pid\":15,\"price\":500.0},\"product_quantity\":1},{\"product\":{\"category_id\":1,\"created_at\":\"2015-06-13 17:49:58\",\"description\":\"MAKRO POINTER\",\"url_image\":\"IMG_Macro.jpg\",\"name\":\"MAKRO POINTER\",\"pid\":18,\"price\":500.0},\"product_quantity\":3}]

I have noticed that when sending the json string with POST Method using Volley library, a lot of anti-slashes have been added to escape double quotes.

So here comes my problem:

I want to decode json to an array of objects in php, so i used

$commands = json_decode( $_POST["commands"],true);

But it always returns an empty array because of the invalide above json (caused by the anti-slashes).

Is there a method in php or in java SDK providing a contract for sending and receiving json without having this kind of problems? Or should i reformat the json in php and delete all the anti-slashes?

like image 216
MChaker Avatar asked Nov 01 '22 01:11

MChaker


2 Answers

The problem is that you try to send the json data in the URL parameters.

You need to override the getBody() method to return the json data as request body, not as url parameters.

Eg:

/**
 * Returns the raw POST or PUT body to be sent.
 *
 * @throws AuthFailureError in the event of auth failure
 */
public byte[] getBody() throws AuthFailureError {
    return new Gson().toJson(commands).getBytes();
}

And then in PHP you can:

$jsonRequest = json_decode(stream_get_contents(STDIN));

like image 129
Andrei Mărcuţ Avatar answered Nov 15 '22 06:11

Andrei Mărcuţ


first there is problem with the json itself is not build correctly is better to JSONObject for this, for example:

JSONObject js = new JSONObject();
try {
       js.put("value",10);
} catch (JSONException e) {
       e.printStackTrace();
}
String jss = js.toString();

you can check if the parse is success by copy the string and copy it in online parser like this http://json.parser.online.fr/

like image 34
Proxytype Avatar answered Nov 15 '22 05:11

Proxytype