加载图片时偶尔会在Android上崩溃?
问题描述:
我有一个机制,我仍然在努力,我试图消化代码,我已经得到了我从各种来源。基本上有一个ImageView,您可以在其中设置个人资料照片,您可以使用相机拍摄照片或从照片库中选择一张照片。我有以下几点:加载图片时偶尔会在Android上崩溃?
public void selectPhoto(View view) {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, CHOOSE_PHOTO);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case CHOOSE_PHOTO:
Uri selectedImage = data.getData();
InputStream imageStream = null;
try {
imageStream = getContentResolver().openInputStream(selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
((ImageView) findViewById(R.id.selImageView)).setImageBitmap(yourSelectedImage);
break;
}
}
编辑:我已经缩小了我的错误的来源,上面的代码。当用户提示从图库中选择一张照片时,系统会发生崩溃,但后来按下而不是选择照片并尝试返回到应用程序。任何想法为什么?
答
在您的onActivityResult中,您没有检查resultCode以查看结果是否被取消。然后你就像一幅图像被传递一样继续。最有可能的,因为resultCode将指示取消您的selectedImage变量为null,并且openInputStream不喜欢打开流。
此外,在抛出异常之后,您将传递一个null imageStream给decodeStream方法。
尝试类似:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case CHOOSE_PHOTO:
if (resultCode = Activity.RESULT_OK) {
Uri selectedImage = data.getData();
InputStream imageStream = null;
try {
imageStream = getContentResolver().openInputStream(selectedImage);
Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
((ImageView) findViewById(R.id.selImageView)).setImageBitmap(yourSelectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} else {
// handle cancelation
}
break;
}
}
+0
是的,我使用了一个类似的解决方案。我确实有跟进;如果我使用CHOOSE_PHOTO选项并选择一张照片,这可以工作。如果我第二次选择了CHOOSE_PHOTO并选择了另一张照片,该应用会崩溃;任何想法为什么? – mike
你应该尝试检查logcat的,那么在这里张贴日志,以便人们可以帮你调试更有效! =] –