2013-01-10 34 views
8

我正在使用LoopJ AndroidAsyncHttp库与我的PhP服务器通信。我有一个问题。LoopJ AndroidAsyncHttp和JSON POST ARRAY

我需要发送一个JSONObject这样的:

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

但在javadoc的;唯一的参数是RequestParams,并且没有任何种类的Array。 AnyOne可以帮我吗?或者让我看看我可以使用的东西。 谢谢。

+0

退房http://stackoverflow.com/questions/6218143/android- post-json-using-http –

回答

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

如果客户端是一个AsyncHttpClient和bodyAsJson是一个String

内JSON
yourJsonObj.toString() 
+0

AsyncHttpClient client = new AsyncHttpClient(); ();}};}};}};}};}}} client.post(getApplicationContext(),URL_connect,实体, “应用/ JSON”,新AsyncHttpResponseHandler() 我得到空的服务器上,为什么 – DoberDog

+0

,这就是我如何创建JSON结构: 的JSONObject M1 =新的JSONObject(); 的JSONObject平方米=新的JSONObject(); \t \t \t \t \t \t \t \t 列表L1 =新链表(); \t \t \t \t \t \t \t \t m1.put(“data1”,“2013-01-10”); \t m1.put(“data2”,“234652”); \t \t \t \t \t \t \t m2.put(“data1”,“2013-01-11”); \t m2。把( “数据2”, “234235”); \t \t \t \t \t \t \t \t l1.add(m1); \t \t l1.add(m2); (“data3”,l1);}}}} jsonObject.put(“data4”,string1); jsonObject.put(“data5”,string2); – DoberDog

+0

在这里,你可以调试它的难读吗? Logcat应该告诉你哪个行和类是空指针异常生成。 – noni

1

我们可以使用的JSONObject类,这是可用javax.json-1.0.2.jar打造以上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类在异步HTTP客户端-1.7.5.jar可用