2013-01-10 33 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可用