Android 如何使用HttpURLConnection管理连接丢失?

Android 如何使用HttpURLConnection管理连接丢失?,android,httpurlconnection,Android,Httpurlconnection,我有一个服务,它使用HttpURLConnection管理下载任务 在执行任何HTTP请求之前,我使用一个自定义的isNetworkAvailable方法,但我想知道如何管理请求过程中丢失的连接 我应该在while循环中调用我的isNetworkAvailable方法吗(这意味着大量调用)?使用HttpURLConnection管理连接丢失的标准方法是什么 HttpURLConnection connection = (HttpURLConnection) url.openConnection(

我有一个
服务
,它使用
HttpURLConnection
管理下载任务

在执行任何HTTP请求之前,我使用一个自定义的
isNetworkAvailable
方法,但我想知道如何管理请求过程中丢失的连接

我应该在
while
循环中调用我的
isNetworkAvailable
方法吗(这意味着大量调用)?使用
HttpURLConnection
管理连接丢失的标准方法是什么

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

FileOutputStream outputStream = openFileOutput(filename, MODE_PRIVATE | MODE_APPEND);               

BufferedInputStream in = new BufferedInputStream(connection.getInputStream());

byte[] data = new byte[1024];
int x = 0;

while ((x = in.read(data, 0, 1024)) >= 0) {
    outputStream.write(data, 0, x);
}

我建议捕获
IOException
,如果发生这种情况,给用户一个重试或取消的选项。您可能需要使用
setConnectTimeou
t(有关如何使用它的示例,请参阅),以确保在合理的时间内收到错误


作为一个随机注释——如果您正在将数据读入一个相当大的缓冲区,就像您在这里一样,使用
BufferedInputStream
几乎没有意义;直接使用
connection.getInputStream()
返回的输入流即可。使用
BufferedInputStream
的唯一原因是,如果您正在读取小块数据,例如一次读取一个字节。

好的,我刚刚看到
IOException
有一个子类
ConnectException
。我会用的,谢谢。关于
BufferedInputStream
:我需要小块来显示下载进度。