【发布时间】:2012-02-02 08:59:02
【问题描述】:
我正在尝试从彗星 URL 链接中检索 json 字符串。
这里是 API 链接:http://www.plurk.com/API#realtime 这是描述:
您将从 /APP/Realtime/getUserChannel 获得一个 URL,然后对该 URL 执行 GET 请求以获取新数据。如果没有新数据添加到您的频道,您的请求将在返回响应之前休眠大约 50 秒。您不会收到有关登录用户添加的响应的通知,但您会收到有关新 plurk 的通知。
我能够获取 comet_server 网址并将其粘贴到 firefox 并手动获取结果。但是,当我尝试在android中获取这些json字符串时,我只得到了超时错误。
01:48:51.698 com.net.xerothermic.plurk 信息 PLURK http://comet58.plurk.com:80/comet?channel=...&offset=0
01:53:43.680 com.net.xerothermic.plurk ERROR 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 "";
}
非常感谢任何建议!
编辑:这里是浏览器的输出。我错过了设置一些属性吗?
【问题讨论】:
-
您可能需要增加读取超时时间 - 因为您收到的消息明确指出读取超时。看here(例如)。
-
是的,我也在考虑。但默认超时值为 0,这意味着它应该永远等待。从日志来看,确实需要超过 50 秒才能生成超时(~5 分钟)。
-
@Jens 你是对的!虽然默认超时值设置为 0,但我仍然需要手动设置超时值。在我将它们设置为 70000(70 秒)后,程序运行成功。奇怪的是,在 PC 上运行的相同代码没有这些行为,我不需要设置超时值。
-
是的,Android 并不总是按照您的预期行事。