Java 长轮询时HttpURLConnection超时(comet)-android
我正在尝试从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。得到 响应错误:连接超时 下面是我用来检索数据的代码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字符串时,我只得到了超时错
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。我不知道为什么有必要,但一旦我设置了它,它就可以正常工作了。