【问题标题】:LoopJ AndroidAsyncHttp and JSON POST ARRAYLoopJ AndroidAsyncHttp 和 JSON POST ARRAY
【发布时间】:2012-12-25 05:05:50
【问题描述】:

我使用 LoopJ AndroidAsyncHttp 库与我的 PhP 服务器通信。我遇到了一个问题。

我需要像这样发送一个 JsonObject:

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

但是在 javadoc 中;唯一的参数是 RequestParams,并且没有任何类型的 Array。 谁能帮我?或者给我看一些我可以使用的东西。 谢谢。

【问题讨论】:

标签: android json http post android-async-http


【解决方案1】:

使用

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

【讨论】:

  • AsyncHttpClient 客户端 = new AsyncHttpClient(); ByteArrayEntity 实体 = new ByteArrayEntity(jsonObject.toString().getBytes("UTF-8")); client.post(getApplicationContext(), URL_connect,entity, "application/json", new AsyncHttpResponseHandler() 我在服务器上得到null,为什么?
  • 这就是我创建 Json 结构的方式: JSONObject m1 = new JSONObject(); JSONObject m2 = 新 JSONObject();列表 l1 = new LinkedList(); m1.put("data1","2013-01-10"); m1.put("data2","234652"); m2.put("data1","2013-01-11"); m2.put("data2","234235"); l1.add(m1); l1.add(m2); jsonObject.put("data3", l1); jsonObject.put("data4", string1); jsonObject.put("data5", string2);
  • 嗯,这里很难读,你能调试一下吗? Logcat 应该会告诉您空指针异常是在哪一行和哪一类中产生的。
  • 无法通过此方法传递布尔值。布尔值被转换为字符串。
【解决方案2】:

我们可以使用 javax.json-1.0.2.jar 提供的 JsonObject 类构建上述 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 中可用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    相关资源
    最近更新 更多