加载图片时偶尔会在Android上崩溃?

加载图片时偶尔会在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; 
    } 
} 

编辑:我已经缩小了我的错误的来源,上面的代码。当用户提示从图库中选择一张照片时,系统会发生崩溃,但后来按下而不是选择照片并尝试返回到应用程序。任何想法为什么?

+1

你应该尝试检查logcat的,那么在这里张贴日志,以便人们可以帮你调试更有效! =] –

在您的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