【问题标题】:How to send a JSON object over HttpClient Request with Android?如何使用 Android 通过 HttpClient 请求发送 JSON 对象?
【发布时间】:2012-02-22 06:02:06
【问题描述】:

我想将 JSON 文本 {} 发送到网络服务并读取响应。我怎样才能从android做到这一点?创建请求对象、设置内容头等步骤有哪些?

我的代码在这里

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) {
    }
}

我犯了什么错误请纠正我,因为它显示了一个错误的请求错误 但是当我在海报上发帖时,它显示我的状态为 Successl 200 ok

【问题讨论】:

  • 尝试设置此类型entity.setContentType("application/json;charset=UTF-8"); entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json;charset=UTF-8"));
  • @Soni 不,它不适合我,我试过了,但它显示错误请求错误
  • @Soni 唯一犯的错误是我在下面的帖子中没有像这样设置标题 httppost.setHeader("Content-type", "application/json");

标签: android json post request


【解决方案1】:

我这样做是为了

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

另外,new HttpPost() 将 Web 服务 URL 作为参数。

【讨论】:

    【解决方案2】:

    在 try catch 循环中,我这样做了:

             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 可能会变得非常大,然后我会建议对其进行 gzip 压缩然后发送,但如果您的 JSON 相当小且大小始终相同,则上述内容应该适合您。

    【讨论】:

      【解决方案3】:

      如果它是一个 Web 服务而不是 RestAPI 调用,那么您可以从服务器获取 WSDL 文件并使用 SOAP Stub 生成器为您完成创建请求对象和网络代码的所有工作,例如 WSClient++

      如果你想自己做,事情就会变得有点棘手。 Android 没有附带 SOAP 库。 但是,您可以在这里下载第 3 方库:http://code.google.com/p/ksoap2-android/

      如果您在使用它时需要帮助,您可能会发现此线程很有帮助:How to call a .NET Webservice from Android using KSOAP2?

      如果它是一个 REST-API 调用,如 POST 或 GET 更具体,那么它非常简单 只需在您的函数中传递一个 JSON 格式化字符串对象,然后使用 org.json 包为您解析响应字符串。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-03-02
        • 2021-07-23
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        相关资源
        最近更新 更多