Java Android InputStream Internet断开连接

Java Android InputStream Internet断开连接,java,android,http,inputstream,disconnect,Java,Android,Http,Inputstream,Disconnect,在我的Android程序中,我有一些下载文件的代码。这很好,但是因为在手机上,你可以随时断开连接,我需要更改它。当你进行到一半时,它会重新连接并恢复下载,有人打电话/你失去手机接收/等等。我不知道如何检测输入流已停止工作。请参阅下面的代码: InputStream in = c.getInputStream(); byte[] buffer = new byte[8024]; int len1 = 0; while ( (len1 = in.read(buffer))

在我的Android程序中,我有一些下载文件的代码。这很好,但是因为在手机上,你可以随时断开连接,我需要更改它。当你进行到一半时,它会重新连接并恢复下载,有人打电话/你失去手机接收/等等。我不知道如何检测输入流已停止工作。请参阅下面的代码:

InputStream in = c.getInputStream();

    byte[] buffer = new byte[8024];
    int len1 = 0;

    while ( (len1 = in.read(buffer)) > 0 ) {
        Log("-"+len1+"- Downloaded.");
        f.write(buffer,0, len1);
        Thread.sleep(50);
    }
当我失去internet连接时,我的日志显示:

Log: -8024- Downloaded.
Log: -8024- Downloaded.
Log: -8024- Downloaded.
Log: -8024- Downloaded.
Log: -6024- Downloaded. (some lower number)
然后我的程序就挂起了((len1=等)。我需要这样做,当互联网断开连接时,我会等待互联网再次连接,然后继续下载。

看这里:

编辑(基于评论):

因此,基于上述想法……您可以将读取内容放入线程中,定期检查线程是否已停止读取数据(可能会更新共享变量)。如果它已终止连接和线程,并根据需要进行处理

另一种选择是不使用HTTPURLConnection,而是自行处理所需的位。

请看这里:

编辑(基于评论):

因此,基于上述想法……您可以将读取内容放入线程中,定期检查线程是否已停止读取数据(可能会更新共享变量)。如果它已终止连接和线程,并根据需要进行处理


另一种选择是不使用HTTPURLConnection,而是自行处理所需的位。

您好,谢谢,但我有一个HTTPURLConnection-您如何从中获得SocketChannel?谢谢,您好,谢谢,但我有一个HTTPURLConnection-您如何从中获得SocketChannel?谢谢,