0

我有一个仍在研究​​的机制,我正在尝试消化代码,并且我已经从各种来源获得了我所拥有的东西。基本上有一个 ImageView,您可以在其中设置个人资料图片,您可以使用相机拍照或从图库中选择图片。我有以下内容:

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;
    }
}

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

4

1 回答 1

1

在您的 onActivityResult 中,您没有检查 resultCode 以查看结果是否被取消。然后,您就像传递了图像一样继续进行。很可能,因为 resultCode 将指示您的 selectedImage 变量为 null 并且 openInputStream 不喜欢打开流。

此外,在引发异常后,您将一个空 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;
  }
}
于 2013-07-16T23:35:01.120 回答