Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LoopJ AndroidAsyncHttp and JSON POST ARRAY

I was using LoopJ AndroidAsyncHttp library to comunicate with my PhP Server. And i got a problem.

I need to send a JsonObject like that:

{      "data": 2376845,      
       "data2": 12545,      
       "array": [{"data3": "2013-01-10",          
                     "data4": 23532        },       
                    {"data3": "2013-01-11",             
                     "data4": 523526   }]
}

But in the javadoc; the only parameters it's RequestParams, and don't have any kind of Array. Can AnyOne Help me? Or Show me something that i can use. Thanks.

like image 926
DoberDog Avatar asked Jan 10 '13 17:01

DoberDog


2 Answers

Use

public void post(Context context, String url, HttpEntity entity, String contentType, AsyncHttpResponseHandler responseHandler)

instead of:

public void post(Context context, String url, RequestParams params, AsyncHttpResponseHandler responseHandler)

Parse your JSON as a String:

ByteArrayEntity entity = new ByteArrayEntity(bodyAsJson.getBytes("UTF-8"));
client.post(context, newUrl, entity, "application/json", responseHandler);

Where client is an AsyncHttpClient and bodyAsJson is a JSON inside a String

yourJsonObj.toString()
like image 164
noni Avatar answered Nov 16 '22 00:11

noni


We can build the Above json format using JsonObject class which is available with javax.json-1.0.2.jar,

JsonObject jo = Json.createObjectBuilder()
            .add("data", 2376845)
            .add("data2", 12545)
            .add("array",Json.createArrayBuilder()
                    .add(Json.createObjectBuilder().add("data3", "2013-01-10").add("data4", 23532).build())
                    .add(Json.createObjectBuilder().add("data3", "2013-01-11").add("data4", 523526).build()))
                    .build();

After building json format

        AsyncHttpClient client=new AsyncHttpClient();
        Request request = client.preparePost(your host URL).
        setHeader("Content-Type","application/json").
        setHeader("Content-Length", ""+jo.toString().length()).setHeader("Authorization","Basic fgfgfgfhfhtetet=").
        setBody(jo.toString()).build();
        ListenableFuture<Response> r = null;
        //ListenableFuture<Integer> f= null;
        try{
        r = client.executeRequest(request);
        System.out.println(r.get().getResponseBody());
        }catch(IOException e){

        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

if you required basic authentication you need to add a key which is combination of username:password encoded with base64 to header,if not leave it in this case i added it to header

mostly this will work's for you

Note:AsyncHttpClient,ListenableFuture classes are available in async-http-client-1.7.5.jar

like image 42
fresher Avatar answered Nov 16 '22 00:11

fresher