我在使用XML从服务器检索的文件时遇到问题。
位图(GIF)是base64编码的,然后作为字符串放在XML中。 应用程序获取此字符串,将其解码为位图,然后显示它。
它在大多数情况下工作正常,但有时BitmapFactory.decodeByteArray返回null,没有任何问题的迹象。
我已将其中一个通过XML失败的文件(它可重复!)复制为资源,并且工作正常。
bMapArray = Base64Coder.decode(cd.image); // Decode the encoded string
bMap = BitmapFactory.decodeResource(getResources(), R.drawable.fail);
Log.e("config", bMap.getConfig().name());
// shows RGB_565, decodes OK and will display
bMap = BitmapFactory.decodeByteArray(bMapArray, 0, bMapArray.length);
Log.e("config", bMap.getConfig().name());
// Null config and displays OK for some files,
// Fails decodeByteArray for the file matching the one used as a resource and some others
我花了好几天时间试图找出问题并没有成功。有没有人有一个好主意? 我很高兴接受这是64位编码/解码过程的问题,但是没有来自decodeByteArray的错误我不知道是什么。
干杯,
马丁。
答案 0 :(得分:0)
我有一个从各种网站下载位图的应用程序 - 其中没有一个是base64编码的。大多数时候位图通过decodeByteArray就好了,但是不时地(例如默认的Facebook个人资料图标)我得到了null。
我花了很多时间试图弄清楚发生了什么,最后得出结论(你也怀疑)这是在decodeByteArray中处理GIF的一个错误。
如果你在这里(以及其他地方)搜索“android bitmap gif decodebytearray”,你可以找到许多其他人都有同样问题的提示 - 但我还没有找到一份授权错误报告。
答案 1 :(得分:0)
这里有三个非常明显的问题可能会出错。
1)在发送之前将图像添加到XML的方式 - 检查它是否正确编码
2)传输过程 - 确保传输没有被截断,尤其是缓冲输入流
3)从收到的XML中解析数据 - 再次检查字符串是否已正确解析出来。
最有可能的候选人是传播。图像的大小是否会影响您看到的结果?如果仅收到部分数据,它将失败。