我使用网络服务来获取图片。服务响应包含base64Binary格式的图像。我尝试使用Base64.decode()(http://iharder.sourceforge.net/current/java/base64/)解码响应数据。请参阅下面的代码:
byte[] data = Base64.decode(responseString);
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
imageView.setImageBitmap(bmp);
decodeByteArray 始终返回null。
我尝试在.png文件中保存数据。我可以在我的PC和Android文件管理器应用程序中打开此文件。但是文件管理器的预览活动无法打开此文件。
然后我尝试使用带有Convert.Base64()方法的.NET客户端解析这些数据。此图像已成功处理。然后我比较用android客户端和.NET客户端创建的图像中的字节数组。差异是字节的符号。 .NET使用无符号字节,但Java仅使用有符号字节。这是我问题的原因吗?
有没有人在解码base64Binary时遇到同样的问题?
答案 0 :(得分:2)
这是一个解决方案,对我来说是有效的(知道图像来自服务器的格式是通过Web服务的是base64binary)
decodedIcon[] = null;
byte[] bb = (resposeString).getBytes("utf-8");
decodedIcon = Base64.decodeBase64(bb);
Bitmap bitmap = BitmapFactory.decodeByteArray(decodedIcon, 0,
decodedIcon.length);
//then you get the image view and setImageBitmap(bitmap)
PS:
Base64.decodeBase64来自org.apache.commons.codec.binary.Base64库; 你应该在assets文件夹中包含commons-codec-1.3.jar
版本不一定是1.3
感谢我的一位朋友提示。