Java 长轮询时HttpURLConnection超时(comet)-android

Java 长轮询时HttpURLConnection超时(comet)-android,java,android,comet,Java,Android,Comet,我正在尝试从comet URL链接检索json字符串 以下是API链接: 以下是描述: 您将从/APP/Realtime/getUserChannel获得一个URL,并且您确实会收到对此URL的请求以获取新数据。如果没有新数据添加到您的频道,您的请求将休眠约50秒,然后返回响应。您不会收到登录用户添加的响应通知,但会收到新Plurk的通知 我能够获得comet_服务器的url并将其粘贴到firefox上,然后手动获取结果。然而,当我试图在android中获取这些json字符串时,我只得到了超时错

我正在尝试从comet URL链接检索json字符串

以下是API链接: 以下是描述:

您将从/APP/Realtime/getUserChannel获得一个URL,并且您确实会收到对此URL的请求以获取新数据。如果没有新数据添加到您的频道,您的请求将休眠约50秒,然后返回响应。您不会收到登录用户添加的响应通知,但会收到新Plurk的通知

我能够获得comet_服务器的url并将其粘贴到firefox上,然后手动获取结果。然而,当我试图在android中获取这些json字符串时,我只得到了超时错误

01:48:51.698 com.net.xerothermic.plurk信息plurk

01:53:43.680 com.net.xerothermic.plurk错误plurk HTTP con。得到 响应错误:连接超时

下面是我用来检索数据的代码

    URL url = new URL(urlString);
    HttpURLConnection conn = null;
    try
    {
        conn = (HttpURLConnection) url.openConnection();
    }
    catch (IOException ex)
    {
        Log.e("PLURK", "HTTP con. open error:" + ex.getMessage());
        return "";
    }
    try
    {
        conn.setRequestMethod("GET");
    }
    catch (ProtocolException ex)
    {
        Log.e("PLURK", "HTTP con. set method error:" + ex.getMessage());
    }
    try
    {
        return conn.getResponseMessage();
    }
    catch (IOException ex)
    {
        Log.e("PLURK", "HTTP con. get response error:" + ex.getMessage());
        return "";
    }
任何建议都将不胜感激

编辑:这是浏览器的输出。我没有设置一些属性吗?

即使默认情况下超时值设置为0(意味着无限等待),我发现我仍然需要显式设置超时值,以避免引发IOException

setConnectTimeout(70000);
setReadTimeout(70000);

这只在android上需要,在Windows上不需要…

您可能需要增加读取超时时间,因为您收到的消息明确指出读取超时。看(比如)。是的,我也考虑过。但是默认的超时值是0,这意味着它应该永远等待。从日志来看,生成超时(约5分钟)确实需要50秒以上的时间。@Jens你说得对!虽然默认超时值设置为0,但我仍然需要手动设置超时值。我将它们设置为70000(70秒)后,程序成功运行。奇怪的是,在PC上运行的同一代码没有这些行为,我也不需要设置超时值。是的,Android并不总是做你期望的事情。我认为它不稳定。我需要尝试更多的wifi点来得出结论…对于对此问题感兴趣的人,请确保在应用程序(即Twitter)中设置web回调URL。我不知道为什么有必要,但一旦我设置了它,它就可以正常工作了。