通过 onActivityResult 设置位图:传递结果失败

Setting bitmap via onActivityResult: Failure delivering result

我正在使用 startActivityForResult 和 onActivityResult 尝试从相机/画廊获取图像并将它们显示在以编程方式生成的 ImageView 中。我可以使用和显示图库图像,但是我遇到了相机图像问题。

我在我的 listAdapter 中为图库按钮(打开自定义图库 class 到 select 多个图像)和相机按钮(打开相机应用程序)在 formListAdapter.java:

private void openCustomGallery() {
    Intent intent = new Intent(context, CustomPhotoGalleryActivity.class);
    context.startActivityForResult(intent, PICK_IMAGE_MULTIPLE);
}

private void launchCamera() {
    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    context.startActivityForResult(cameraIntent, CAMERA_REQUEST);
}

然后使用 switch 语句调用 onActivityResult 以确定来自我的主 activity formsActivity.java:

的请求代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
            case PICK_IMAGE_MULTIPLE:
                Log.i("Gallery Request Fired", "Yes");

                //Declare imagePaths / ArrayList to store bitmaps
                imagesPathList = new ArrayList<String>();
                bitmapImages = new ArrayList<Bitmap>();
                String[] imagesPath = data.getStringExtra("data").split("\|");

                //Loop through selected images
                for (int i = 0; i < imagesPath.length; i++) {
                    //Reduce file size
                    compressBitmap = decodeSampledBitmapFromResource(imagesPath[i],
                            350, 350);
                    //Add image to array
                    bitmapImages.add(compressBitmap);
                }

                //Send bitmap to listview & refresh
                formListAdapter.getBitmap(bitmapImages);
                adapter.notifyDataSetChanged();
                break;
            case CAMERA_REQUEST:
                Log.i("Camera Request Fired", "Yes");

                //I've tried various logic here, however bitmap is always null and never set.
                Bitmap datifoto = null;
                Uri picUri = data.getData();//<- get Uri here from data intent
                if (picUri != null) {
                    try {
                        //Not setting datifoto
                        datifoto = android.provider.MediaStore.Images.Media.getBitmap(
                                this.getContentResolver(),
                                picUri);

                        //ERROR HERE ==> Null pointer exception because "datifoto" is null and not set
                        bitmapImages.add(datifoto);
                    } catch (FileNotFoundException e) {
                        throw new RuntimeException(e);
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }
                break;
            default:
                Log.i("Default", "Yes");
                break;
        }
    }
}

但是,这总是 returns 一个“尝试在空对象引用上调用虚拟方法 'boolean java.util.ArrayList.add(java.lang.Object)'”,因为我试图向数组添加一个空对象,由于未设置位图:

Caused by : java.lang.RuntimeException : Failure delivering result ResultInfo {
    who = null,
    request = 1888,
    result = -1,
    data = Intent {act = inline - data dat = content : //media/external/images/media/18125 (has extras) }} 
    to activity {net.swnton_blandpjkeary.james.pjkearymobileinspections/net.swnton_blandpjkeary.james.pjkearymobileinspections.formsActivity}: 
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference   

理想情况下,我会设置位图,将其添加到 ArrayList,然后将此列表传递给适配器以在 ImageView 中进行设置。我假设我没有正确处理 Intent 数据,但我尝试了很多解决方案,结果都相同。

在此先感谢您的帮助:)

我必须在 switch 语句之外声明 bitmapImages = new ArrayList<>();...:|