2012-02-22 114 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