【问题标题】: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 没有问题,因为它适用于某些点击,而不适用于某些点击。
  • 你没有回答我所有的问题。

标签: android image bitmap base64 android-camera


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-26
    • 2012-06-01
    • 2016-12-28
    • 2015-07-04
    • 2019-09-29
    • 2015-02-25
    • 2015-10-21
    相关资源
    最近更新 更多