为啥 decodeByteArray 返回 null?
Posted
技术标签:
【中文标题】为啥 decodeByteArray 返回 null?【英文标题】:Why is decodeByteArray returning null?为什么 decodeByteArray 返回 null? 【发布时间】:2015-11-25 17:26:06 【问题描述】:我正在尝试将图像保存到数据库并在 UI 上检索和显示它们。
我正在使用以下代码将单击/从图库中的图像上传到 My SQL。
public void onActivityResult(int requestCode, int resultCode, Intent data)
Bitmap photo = null;
if (requestCode == CAMERA_REQUEST && resultCode == getActivity().RESULT_OK)
photo = (Bitmap) data.getExtras().get("data");
// imageView.setImageBitmap(photo);
else if(requestCode == GALLERY_REQUEST && resultCode == getActivity().RESULT_OK)
Uri selectedImage = data.getData();
String[] filePathColumn = MediaStore.Images.Media.DATA;
Cursor cursor = getActivity().getContentResolver().query(
selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
photo = BitmapFactory.decodeFile(filePath);
下面的代码上传到db。
void createParam()
photo.compress(Bitmap.CompressFormat.PNG, 100, byteArrayBitmapStream);
byte[] b = byteArrayBitmapStream.toByteArray();
String encodedImage = Base64.encodeToString(b, Base64.DEFAULT);
params.add(new BasicNameValuePair("image", encodedImage));
这段代码用于解码从 db 检索到的图像字符串。
public Bitmap getImage()
if("null".equalsIgnoreCase(image))
return null;
else
byte[] decodedString = Base64.decode(image, Base64.NO_WRAP);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
return decodedByte;
问题是方法中的 decodeByteArray 返回 null。并且字符串没有被解码。前置摄像头点击的图像不会发生此问题。 请帮我找出问题!
【问题讨论】:
'Base64.DEFAULT);'。不匹配 'Base64.NO_WRAP);'。 greenapps 我尝试制作两个 no_wrap。但这并没有帮助。我不断得到这个:D/skia:---解码器->解码返回错误 将两者设为默认值。剩下的我想知道你的数据库在哪里,因为两者都是java代码。请告诉您在哪里进行编码以及在哪里进行解码。 我也尝试将它们都设为“默认”,但这不起作用。 DB 没有问题,因为它适用于某些点击,而不适用于某些点击。 你没有回答我所有的问题。 【参考方案1】:我也得到了 null 并通过设置 options.inJustDecodeBounds=false;
来修复它
public static String bitmapToBase64(Bitmap bitmap)
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream .toByteArray();
return Base64.encodeToString(byteArray, Base64.DEFAULT);
public static Bitmap base64ToBitmap(String b64)
byte[] imageAsBytes = Base64.decode(b64.getBytes(), Base64.DEFAULT);
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds=false;
return BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length, opts);
【讨论】:
以上是关于为啥 decodeByteArray 返回 null?的主要内容,如果未能解决你的问题,请参考以下文章
BitmapFactory.decodeByteArray() 始终返回 null(手动创建的字节数组)
为啥 environment.getProperty("spring.profiles.active") 在使用 @ActiveProfiles 激活测试中的配置文件时返回 nul
BitmapFactory.decodeByteArray OutOfMemory