如何在android上下载未知长度的图像文件

时间:2013-06-29 15:22:19

标签: android image http download inputstream

我正在尝试从本地网络网址

显示文件
http://192.168.1.118:1881/image.jpg

并在ImageView中立即显示它。问题是,当我为这个url打开inputStream并尝试使用BitmapFactory解码它时,我得到null Bitmap。我想这是因为我从输入流中获取此消息:libcore.net.http.UnknownLengthHttpInputStream。

该图像由服务器应用程序支持和托管,我无法修改。

非常感谢,我努力寻找解决方案,但没有什么对我有用

2 个答案:

答案 0 :(得分:1)

将其下载到字节数组并解码字节数组:

byte[] data = read(inputStreamFromConnection);
if (data != null) {
    Bitmap downloadedBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
}

public static byte[] read(InputStream is) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream(8192);
    try {
        // Read buffer, to read a big chunk at a time. 
        byte[] buf = new byte[2048];
        int len;
        // Read until -1 is returned, i.e. stream ended.
        while ((len = is.read(buf)) != -1) {
            baos.write(buf, 0, len);
        }
    } catch (IOException e) {
        Log.e("Downloader", "File could not be downloaded", e);
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            // Input stream could not be closed.
        }
    }
    return baos.toByteArray();
}

答案 1 :(得分:0)

尝试下载完整图像,然后在下载完成后显示。例如,将 all 下载的字节写入数组,然后使用BitmapFactory.decodeByteArray。或者将图像保存到临时文件,然后使用BitmapFactory.decodeFile然后删除该文件。