2012-02-22 102 views
14

我想將JSON文本發送到Web服務並讀取響應。我怎麼能從android做到這一點?哪些步驟,如創建請求對象,設置內容頭部等如何通過Android的HttpClient請求發送JSON對象?

我的代碼是在這裏

public void postData(String result,JSONObject obj) { 
    // Create a new HttpClient and Post Header 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpParams myParams = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(myParams, 10000); 
    HttpConnectionParams.setSoTimeout(myParams, 10000); 

    String json=obj.toString(); 

    try { 

     HttpPost httppost = new HttpPost(result.toString()); 
     StringEntity se = new StringEntity(obj.toString()); 
     se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); 
     httppost.setEntity(se); 

     HttpResponse response = httpclient.execute(httppost); 
     String temp = EntityUtils.toString(response.getEntity()); 
     Log.i("tag", temp); 


    } catch (ClientProtocolException e) { 

    } catch (IOException e) { 
    } 
} 

我做了什麼錯誤PLZ糾正我,因爲它顯示了我一個壞請求錯誤 但是當我也張貼在海報它表明我的地位,全成200 OK

+0

嘗試設置此類型'entity.setContentType(「application/json; charset = UTF-8」); \t \t \t \t entity.setContentEncoding(新BasicHeader(HTTP.CONTENT_TYPE, \t \t \t \t \t \t 「應用/ JSON的;字符集= UTF-8」));' – MKJParekh 2012-02-22 06:21:20

+0

@Soni沒有它不適合我,我工作的罰款嘗試它,但它顯示我錯誤的請求錯誤 – 2012-02-22 06:29:18

+0

@Soni唯一的錯誤做的是我沒有在下面的帖子中設置像這樣的後端httppost.setHeader(「Content-type」,「application/json」); – 2012-02-22 06:31:27

回答

13

我這樣做與

httppost.setHeader("Content-type", "application/json"); 

此外,new HttpPost()將Web服務URL用作參數。

+0

Thanku it對我而言 – 2012-02-22 06:20:26

1

在嘗試捕捉循環,我這樣做:

  HttpPost post = new HttpPost(
     "https://www.placeyoururlhere.com"); 
     post.setHeader(HTTP.CONTENT_TYPE,"application/json"); 
     List<NameValuePair> nameValuePairs = new 
     ArrayList<NameValuePair>(1); 
     nameValuePairs.add(new BasicNameValuePair("json", json)); 
     post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     HttpClient client = new DefaultHttpClient(); 
     HttpResponse resp = client.execute(post); 
     HttpEntity entity = resp.getEntity(); 

     response = EntityUtils.toString(entity); 

你可以根據你有多少領域有添加nameValurPairs。 通常情況下,JSON可能會變得非常巨大,然後我會建議將它轉換爲然後發送,但如果您的JSON相當小並且尺寸始終相同,則上述內容應該適合您。

1

如果它是一個Web服務而不是RestAPI調用,那麼您可以從服務器獲取WSDL文件,並使用SOAP存根生成器來完成爲您創建請求對象和網絡代碼的所有工作,例如WSClient ++

如果你想自己做,那麼事情會變得棘手。 Android不包含SOAP庫。 然而,你可以在這裏下載的第三方庫:http://code.google.com/p/ksoap2-android/

如果你需要使用它的幫助,你會發現這個線程幫助:How to call a .NET Webservice from Android using KSOAP2?

如果它像POST一個REST API調用或GET更具體那麼它非常簡單 只需在你的函數中傳遞一個JSON格式化的字符串對象,然後使用org.json包來解析你的響應字符串。

希望這會有所幫助。

+0

好帖子幫助我 – 2012-02-22 06:27:00