解码bytearray显示位图到ImageView Android


Decoding ByteArrray to display Bitmap into ImageView Android

可能我在重复同样的问题,但我还没有找到解决这个问题的方法&许多同样的问题仍然没有答案。所以,这是我的问题:

我已经实现了PHP后端,用户可以上传任何图像格式的图片&它将以BLOB形式保存在MySQl数据库中。为了在Android设备上检索这些图像,我准备了JSON响应,其中这些图像是base64字符串的形式。

PHP代码:
$rightScrollImage= base64_encode($row['right_image']);

现在,在Android端,这些图像将保存在SQLite数据库&这里是

插入图像的代码:

rightScrollImage.setRightimagedata(Base64.decode(row.getString("rightScrollerImage"), 0));

WHERE字段在SQLite中的数据类型也是BLOB。

显示图像的代码:

byte[] imageData = cursor.getBlob(cursor.getColumnIndex(DatabaseManager.RIGHT_IMAGE));
Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
imageStream.reset();
holder.imageView.setImageBitmap(bitmap);

这个代码的问题是它可以解码很少的图像&未显示的报错"D/skia:——decoder->decode returned false"

试试这个:

String rightScrollerImage = urlFromItsComing();
byte[] image= Base64.decode(rightScrollerImage, Base64.DEFAULT);
Bitmap = bmpImage = BitmapFactory.decodeByteArray(image, 0, image.length);
someImageView.setImageBitmap(bmpImage);

更新(如果您在db中首先保存字符串):

SaveInColumnWith_String_Datatype(rightScrollerImage);
String image_data = cursor.getString(cursor.getColumnIndex(DBData.ColumnName));
    byte[] image= Base64.decode(image_data, Base64.DEFAULT);
    Bitmap = bmpImage = BitmapFactory.decodeByteArray(image, 0, image.length);
    someImageView.setImageBitmap(bmpImage);

如果您保存在BLOB数据类型字段,在保存之前,将字符串转换为字节[],如:

    byte[] image_byte_data = Base64.decode(imageDataString, Base64.DEFAULT);
SaveInColumnWith_BLOB_Datatype(image_byte_data);
byte[] image_data = cursor.getBlob(cursor.getColumnIndex(DBData.ColumnName));
    Bitmap = bmpImage = BitmapFactory.decodeByteArray(image_data, 0, image.length);
    someImageView.setImageBitmap(bmpImage);