Android Camera Intent onActivityResult()使用Developer.Android指南发出空错误

时间:2018-04-17 16:31:44

标签: android android-camera-intent

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

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);
    }
}

期待我得到一个空对象引用

  

将结果ResultInfo {who = null,request = 1,result = -1,data = Intent {act = inline-data(has extras)}}传递给活动失败... java.lang.NullPointerException:尝试调用虚方法'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)'对空对象引用...行“mImageView.setImageBitmap(imageBitmap);”

更新:不仅仅是如何解决空对象问题,更重要的是onActivityResult()如何适应生命周期的其余部分。为什么Android在摄像机意图后调用mImageView = findViewById(R.id.image_view);时忘记了onCreate()onResumeonActivityResult()的分配? onActivityResult()是否在活动生命周期中充当单独的特殊事件?如果是,则应更新https://developer.android.com/training/camera/photobasics.html处的开发者指南以包含该内容。

2 个答案:

答案 0 :(得分:1)

变量mImageView为null,可以使用findViewById(R.id.idImageView)设置引用;

答案 1 :(得分:1)

很酷,你的崩溃实际上并不是的onActivityResult中有NPE的十几个问题的重复。

调用onActivityResult()回调后,您的活动的 mImageView 字段为 null 。最有可能的是,这是因为您的活动是在相机完成您的意图后由系统重新创建的。你应该把行

mImageView = findViewById(R.id.your_imageView);

在您的活动的onCreate()中,或者您甚至可以在onActivityResult()内执行此操作。 onResume()too late。无论如何,您必须确保加载了相应的布局