【问题标题】:Android Camera Intent onActivityResult() Null error using a Developer.Android guideAndroid Camera Intent onActivityResult() Null 错误使用 Developer.Android 指南
【发布时间】:2018-04-20 23:30:36
【问题描述】:

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

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() 如何适应生命周期的其余部分。为什么在相机意图后调用onActivityResult() 时,Android 会忘记在onCreate()onResume 中分配mImageView = findViewById(R.id.image_view);onActivityResult() 是否在活动生命周期中充当单独的特殊事件?如果是这样,https://developer.android.com/training/camera/photobasics.html 的开发人员指南应更新以包含该内容。

【问题讨论】:

标签: android android-camera-intent


【解决方案1】:

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

【讨论】:

  • 啊,是的,我在onCreate() 中引用了它,但将它添加到onActivityResult() 似乎可以解决问题。我读到该错误是因为位图为空,而不是视图。
【解决方案2】:

酷,你的崩溃真的不是与 的 onActivityResult 中有 NPE 的十几个问题的重复。

当您的onActivityResult() 回调被调用时,您的Activity 的mImageView 字段为null。最有可能发生这种情况是因为您的活动是在相机满足您的意图后由系统重新创建的。你应该把这条线

mImageView = findViewById(R.id.your_imageView);

在您的活动的onCreate() 中,或者您甚至可以在onActivityResult() 中执行此操作。 onResume()too late。在任何情况下,您都必须确保加载了适当的layout

【讨论】:

  • 只有在onActivityResult() 中调用mImageView = findViewById(R.id.your_imageView); 时它才会起作用。即使在onCreateonResume 中设置,对象也是空的。
  • 你是对的:onResume()在这种情况下不好,onActivityResult()之前发生过。
猜你喜欢
  • 2015-12-23
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 2013-01-11
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多