我在很多地方读到Android不支持原生gif。因此,我的代码在BitmapFactory.decodeByteArray
上失败了。这是我的代码:
URL url = new URL(imgURL); //you can write here any link
HttpURLConnection ucon = (HttpURLConnection)url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(5000);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
image = BitmapFactory.decodeByteArray(baf.toByteArray(), 0, baf.toByteArray().length);
使用调试器,我确认头数据加载正确,并且是GIF格式的。但是,一旦解码函数运行,我就会得到一个空值。我的第一个猜测是,我需要做一个GIF->PNG转换。我该怎么做?还有其他选择吗?
GifView类http://code.google.com/p/android-gifview/工作良好。该项目是为动画gif设计的,但它也适用于静态gif。
因此,尽管Android抱怨GIF和解码失败,但我认为问题在于我的代码中的其他故障。我所做的更改使代码现在可以工作。
- 确保我关闭了输入流
- 删除了一个可能导致无限循环和线程生成的事件(这是我从HTML源中提取GIF文件列表的解析规则的失败)
- 确保我在
List
对象中存储的Bitmap
文件在使用之前始终正确地进行了广播
我通过这篇几乎完全相同的帖子找到了帮助和细节。在这个问题上有一些链接。
最后,我根本没有触摸我的位图或InputStream对象,数据被正确接收(根据我对GIF标头字节的确认),但后来使用数据时失败了。