Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何停止Android中的网络操作?_Java_Android_Multithreading_Networking_Stream - Fatal编程技术网

Java 如何停止Android中的网络操作?

Java 如何停止Android中的网络操作?,java,android,multithreading,networking,stream,Java,Android,Multithreading,Networking,Stream,在我的应用程序中,我使用Drawable.createFromStream(inputStream,null)从Web下载图像其中inputStream与此代码一起使用: connection = new URL(url).openConnection(); connection.setConnectTimeout(1000); connection.setReadTimeout(1000); imagesRenderer.downloadStream = connection.getInput

在我的应用程序中,我使用
Drawable.createFromStream(inputStream,null)从Web下载图像其中
inputStream
与此代码一起使用:

connection = new URL(url).openConnection();
connection.setConnectTimeout(1000);
connection.setReadTimeout(1000);
imagesRenderer.downloadStream = connection.getInputStream();
图像可能很大,当我想停止图像下载时,问题就开始了。 由于
networkMainThreadException
的原因,调用
inputStream.close()
既不能直接从UI线程调用,也不能与后台线程一起调用,如下代码所示:

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}).start();
这一个似乎不起作用:操作完成了,就好像没有人试图阻止它一样


所以我想知道,有没有一种方法可以立即关闭网络流,或者我必须以另一种方式实现图像下载?如果是这样的话,正确的方法是什么?

好吧,在下载图像和创建可绘制图像之间使用缓冲区解决了这个问题:

downloadStream = connection.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
while (!needsCancel) {
    int r = downloadStream.read(buffer);
    if (r == -1) break;
    out.write(buffer, 0, r);
}
d = Drawable.createFromStream(new ByteArrayInputStream(out.toByteArray()), null);