【问题标题】:not getting response response = httpclient.execute(request);没有得到响应 response = httpclient.execute(request);
【发布时间】:2011-08-04 09:36:22
【问题描述】:
public class HTTPPoster {
    public static HttpResponse doPost(String url, JSONObject c) throws ClientProtocolException, IOException 
    {

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost request = new HttpPost(url);

        HttpEntity entity;
        StringEntity s = new StringEntity(c.toString());
        s.setContentEncoding((Header) new BasicHeader(HTTP.DEFAULT_CONTENT_CHARSET, "application/json"));
        entity = s;
        request.setEntity(entity);

        HttpResponse response;

        response = httpclient.execute(request);

        return response;
    }

}

这是代码,但在 response = http.client.execute(request) 上没有得到响应。我找不到原因。

【问题讨论】:

  • 对不起 Demet 我很想回答你的问题,但你给我们的工作不多。以最礼貌的方式写下那张纸条。仅仅要求代码并不是最好的行为。什么水
  • 您得到的回应是什么?它是空的吗?是否抛出异常?

标签: android httpclient http-post


【解决方案1】:

您应该异步调用该方法。然后它将使用相同的代码。 将这两行代码添加到你的项目中

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

和 将最低 sdk 版本设为 9

【讨论】:

  • 非常感谢您!我找到了所有 http 请求示例,但都不起作用。添加您的代码后,所有示例都可以正常工作!为什么这些示例没有提及您的代码?
  • @YiFeng 你也可以使用 android 的 asyncTask 功能来达到同样的效果。这是 asyncTask developer.android.com/reference/android/os/AsyncTask.html 的快速链接。您应该在 doBackgroundTask 函数中调用您的 http 请求。在 android 中不首选在主线程中执行阻塞任务。阻塞任务应该在后台线程中完成
  • 很棒的答案 - 非常有帮助
【解决方案2】:

您可以使用以下代码检查您是否收到来自服务器的响应:

HttpResponse response = httpClient1.execute(request);
                    Log.v("response code", response.getStatusLine()
                            .getStatusCode() + ""); 

如果您得到的响应代码值为 200,那么您正在从服务器获取数据,如果响应代码值 >=300,那么您的服务器端有错误。

【讨论】:

  • 响应不是HtppResponse,而是String。或者你如何让它成为HttpResponse?这是否取决于ResponseHandler
  • @Peterdk:请参阅我在您发表评论后提出的以下问题。我给出的答案是正确的。您请更新您的知识。在这里查看我的问题:stackoverflow.com/questions/8365741/is-httpresponse-string/…
  • 如果您提供responsehandler,该方法将返回T。所以还有一个通用的execute 方法可用,如果是BasicResponseHandler,它会返回一个字符串。
【解决方案3】:

首先尝试通过执行这两个步骤将返回类型更改为String

改变

public static HttpResponse doPost(String url, JSONObject c) throws ClientProtocolException, IOException 

public static String doPost(String url, JSONObject c) throws ClientProtocolException, IOException 

改变

HttpResponse response; 

String response; 

现在检查响应字符串?还是null吗?


【讨论】:

    【解决方案4】:

    这是一个权限问题。

    将此行 <uses-permission android:name="android.permission.INTERNET" /> 添加到您的清单文件并重建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 2021-06-30
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多