LoopJ AndroidAsyncHttp и JSON POST ARRAY

Я использовал библиотеку LoopJ AndroidAsyncHttp для общения с моим PhP-сервером. И у меня проблема.

Мне нужно отправить JsonObject следующим образом:

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

Но в джавадоке; Единственными параметрами являются RequestParams и не имеют никакого массива. Может кто-нибудь мне помочь? Или Покажи мне то, что я могу использовать. Благодарю.

Solutions Collecting From Web of "LoopJ AndroidAsyncHttp и JSON POST ARRAY"

использование

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

вместо:

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

Разберите свой JSON как строку:

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

Где клиент является AsyncHttpClient, а bodyAsJson – JSON внутри строки

 yourJsonObj.toString() 

Мы можем создать формат выше json, используя класс JsonObject, который доступен с помощью 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(); 

После создания json-формата

  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(); } 

Если вам нужна базовая аутентификация, вам нужно добавить ключ, который представляет собой комбинацию имени пользователя: пароль, закодированный с base64, в заголовок, если не оставить его в этом случае, я добавил его в заголовок

В основном это будет работать для вас

Примечание: классы AsyncHttpClient, ListenableFuture доступны в async-http-client-1.7.5.jar