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);
设置引用
太棒了,您的崩溃确实不是 android-camera-intent.
Activity结果中包含 NPE 的十几个问题的重复
当您的 onActivityResult()
回调被调用时,您的 Activity 的 mImageView 字段为 null。发生这种情况很可能是因为您的 Activity 是在相机完成您的 Intent 后由系统重新创建的。你应该把行
mImageView = findViewById(R.id.your_imageView);
可以在 Activity 的 onCreate()
中,也可以在 onActivityResult()
中进行。 onResume()
是 too late。在任何情况下,您都必须确保加载了适当的 布局 。
我正在尝试使用基本的拍照意图 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);
太棒了,您的崩溃确实不是 android-camera-intent.
Activity结果中包含 NPE 的十几个问题的重复当您的 onActivityResult()
回调被调用时,您的 Activity 的 mImageView 字段为 null。发生这种情况很可能是因为您的 Activity 是在相机完成您的 Intent 后由系统重新创建的。你应该把行
mImageView = findViewById(R.id.your_imageView);
可以在 Activity 的 onCreate()
中,也可以在 onActivityResult()
中进行。 onResume()
是 too late。在任何情况下,您都必须确保加载了适当的 布局 。