我正在尝试使用基本的拍照意图返回缩略图并将其设置为图像视图,如开发人员网站所示:
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()
和onResume
中onActivityResult()
的分配? onActivityResult()
是否在活动生命周期中充当单独的特殊事件?如果是,则应更新https://developer.android.com/training/camera/photobasics.html处的开发者指南以包含该内容。
答案 0 :(得分:1)
变量mImageView
为null,可以使用findViewById(R.id.idImageView)设置引用;
答案 1 :(得分:1)
很酷,你的崩溃实际上并不是android-camera-intent的onActivityResult中有NPE的十几个问题的重复。
调用onActivityResult()
回调后,您的活动的 mImageView 字段为 null 。最有可能的是,这是因为您的活动是在相机完成您的意图后由系统重新创建的。你应该把行
mImageView = findViewById(R.id.your_imageView);
在您的活动的onCreate()
中,或者您甚至可以在onActivityResult()
内执行此操作。 onResume()
是too late。无论如何,您必须确保加载了相应的布局。