我从Web服务持续获取数据。BufferedReader.readLine()在强制断开连接时挂起
URLConnection connection;
BufferedReader in = null;
try {
SharedPreferences preferences = context.getSharedPreferences(
"MyPreferences", Context.MODE_PRIVATE);
int timeoutConnection = Integer.parseInt(preferences.getString(
"timeout", "60")) * 1000;
URL urlAddress = new URL(preferences.getString("apiUrl",
defaultURL));
connection = urlAddress.openConnection();
connection.setConnectTimeout(timeoutConnection);
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
final String[] inputLine = { null };
int i=0;
while (isOnline() && (inputLine[0] = in.readLine()) != null) { // isOnline checks if connected to internet.
((Activity) context).runOnUiThread(new Runnable() {
public void run() {
callback.run(inputLine[0]);
}
});
}
} catch (Exception e) {
..
..
}
这工作正常,直到我连接到互联网。但只要我强制断开,inputLine[0] = in.readLine()
不响应。我没有任何例外。
那么我该如何检查连接是否断开?仅使用readLine()
或其他内容。
注意:我看到几个建议使用BufferedReader.ready()
的解决方案。我也尝试过,但总是返回false。
请为我提供一个工作解决方案。
谢谢
您可以看到读取超时在'URLConnection'上。也许设置一个较低的值会触发更早的异常。 – 2014-10-19 13:09:12
尽管超时设置为45秒,但即使在45秒后我也没有收到任何内容。 – Nitish 2014-10-19 13:11:51