我正在使用LoopJ AndroidAsyncHttp库来与我的PhP服务器通信。我遇到了问题。
我需要像这样发送一个JsonObject:
{ "data": 2376845,
"data2": 12545,
"array": [{"data3": "2013-01-10",
"data4": 23532 },
{"data3": "2013-01-11",
"data4": 523526 }]
}
但是在javadoc中;唯一的参数是RequestParams,并且没有任何类型的数组。 谁能帮我?或者告诉我一些我可以使用的东西。 感谢。
答案 0 :(得分:23)
使用
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);
其中client是AsyncHttpClient,bodyAsJson是String中的JSON
yourJsonObj.toString()
答案 1 :(得分:1)
我们可以使用javax.json-1.0.2.jar提供的JsonObject类构建Above json格式,
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中可用