Android Http默认客户端仅在另一个设备发出类似但不相同的请求后超时

时间:2014-06-03 21:27:51

标签: android httpclient

一些快速背景。我们有多个设备运行扫描程序应用程序,它会检查数据库以查看是否已扫描了ID。我可以随意扫描设备A,没有问题。然后我拿起设备B并扫描,也是我喜欢的次数。如果我选择设备A备份并扫描,HttpClient将挂起大约60秒,拒绝发送任何进一步的请求。下面的代码评论了失败的地方。

// Asynchronous get request
private class aGETRequest extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
        String response = "";
        for (String url : urls) {
            DefaultHttpClient client = new DefaultHttpClient();
            client.setKeepAliveStrategy(null);
            HttpGet httpGet = new HttpGet(url);

            try {
                HttpResponse httpResponse = client.execute(httpGet); //Hangs Here
                HttpEntity httpEntity = httpResponse.getEntity();

                InputStreamReader isr = new InputStreamReader(httpEntity.getContent());
                BufferedReader buffer = new BufferedReader(isr);

                String s = "";
                while ((s = buffer.readLine()) != null) {
                    response += s;
                }

                httpEntity.consumeContent();
                isr.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

            httpGet.abort();
            client.getConnectionManager().shutdown();
        }
        return response;
    }

    @Override
    protected void onPostExecute(String result) {
        results(result);
    }
} 

客户端挂起甚至窥探流量显示故障后设备A根本没有发送任何请求。你准备好了最好的部分吗?如果设备通过代理服务器,它可以工作。 W.T.F?

1 个答案:

答案 0 :(得分:0)

Android是java 6 compat。右。

java 7上的BufferedReader让我感到紧张,而while read循环似乎是什么悬挂......

我会尝试一个不同的不同的读取循环类,它在java 6上是可靠的,或者我会找到其他人的httpclient模式,它是可靠的。

我的猜测是,你的代码永远不会脱离以下内容......

while ((s = buffer.readLine()) != null)

也许服务器正在使用diff协议(长度= 0的模式,然后是\ r \ n或something来重新启动分块编码。