Android 使用 Developer.Android 指南的 Camera Intent onActivityResult() Null 错误

Android Camera Intent onActivityResult() Null error using a Developer.Android guide

我正在尝试使用基本的拍照意图 return 缩略图并将其设置为图像视图,如开发者网站所示:

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        mImageView.setImageBitmap(imageBitmap);
    }
}

预计我会得到一个空对象引用

Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data (has extras) }} to activity ... java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference ... at line "mImageView.setImageBitmap(imageBitmap);"

更新: 不仅仅是一个如何修复空对象的问题,更重要的是 onActivityResult() 如何适应生命周期的其余部分。为什么 Android 在 onCreate()onResume 中忘记了 mImageView = findViewById(R.id.image_view); 的分配,而当 onActivityResult() 在相机意图之后调用时? onActivityResult() 是否作为 activity 生命周期中的一个单独的特殊事件?如果是这样,https://developer.android.com/training/camera/photobasics.html 的开发者指南应该更新以包含它。

变量mImageView为null,可以通过findViewById(R.id.idImageView);

设置引用

太棒了,您的崩溃确实不是 .

Activity结果中包含 NPE 的十几个问题的重复

当您的 onActivityResult() 回调被调用时,您的 Activity 的 mImageView 字段为 null。发生这种情况很可能是因为您的 Activity 是在相机完成您的 Intent 后由系统重新创建的。你应该把行

mImageView = findViewById(R.id.your_imageView);

可以在 Activity 的 onCreate() 中,也可以在 onActivityResult() 中进行。 onResume()too late。在任何情况下,您都必须确保加载了适当的 布局