Java 爪哇-另一个“;BitmapFactory.decodeByteArray始终为空”;

Java 爪哇-另一个“;BitmapFactory.decodeByteArray始终为空”;,java,php,android,mysql,decode,Java,Php,Android,Mysql,Decode,我有一个图像以这种形式存储在数据库中 "/9j/4AAQSkZJRgABAQAAAQABAAD/2w <...> igD//2Q==" Android通过一个电话获得: StringBuffer result = m_dbi.getResult(Constants.SERVER_HOST_PHP + "/get_user_picture.php", params, "GET"); 调试我已经看到结果是正确的 我将result.toString()传递给writeImageToFi

我有一个图像以这种形式存储在数据库中

"/9j/4AAQSkZJRgABAQAAAQABAAD/2w <...> igD//2Q=="
Android通过一个电话获得:

StringBuffer result = m_dbi.getResult(Constants.SERVER_HOST_PHP + "/get_user_picture.php", params, "GET");
调试我已经看到结果是正确的

我将result.toString()传递给writeImageToFile(字符串pic),该文件执行以下操作:

...
byte[] decodedByte = Base64.decode(pic, Base64.DEFAULT);
Bitmap bm = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
...
pic和decodedByte.length都是正确的,但bm始终为null

我已尝试将Base64.DEFAULT更改为无填充或无换行,但始终为空


原因可能是什么?

问题是因为您使用
mysqli
real\u escape\u string()
将图像保存在一个BLOB中。与任何字符串转义方法一样,此方法用于文本,并更改它认为无效字符的内容。将此应用于图像而不是字符串会损坏图像


应使用中所述的过程存储BLOB,使用
send_long_data()
并禁止转义。

当您将
字节[]
写入文件,并试图在开发机器上的图像查看器中查看它时,您了解到了什么?如果它保存在base64的数据库中,你为什么在上面调用
base64\u encode
?@commonware:我应该学什么?“这只是一张不可读的图片。”真怀疑论者:对,是我的错。我将它保存到已解码的数据库($pic_buff=base64_decode($base);$pic_buff=$db->real_escape_string($pic_buff);),因此在获取它时我必须对它进行编码。在运行一个需要字符串的函数后,你是否将它保存到磁盘?您的db列是什么类型的,数据库是什么?好的,谢谢。奇怪的是,在我移动到prepare()和send_long_data()之前,real_escape_string()正在工作。您的回答还帮助我修复了PDF的插入/选择,因此我应该接受它两次:-)
...
byte[] decodedByte = Base64.decode(pic, Base64.DEFAULT);
Bitmap bm = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
...