Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在ImageView中显示库中的图像?_Java_Android_Imageview - Fatal编程技术网

Java 如何在ImageView中显示库中的图像?

Java 如何在ImageView中显示库中的图像?,java,android,imageview,Java,Android,Imageview,我创建了一个按钮,让用户在“用相机拍照”和“从多媒体资料中选择图片”之间进行选择 当拍摄/选择照片时,我会将其显示在下一个活动的ImageView中,我会传递为存储拍摄/选择的照片而创建的文件的URI 当用户使用相机拍照时,它会按预期工作,但当用户从gallery中选择图像时,下一个活动中不会显示图像,尽管两个意图(拍照和选择照片)的编码相同 我的问题:为什么下一个活动中不显示从库中拾取的图像?或者我应该如何继续显示它 打开摄像机的意图(工作正常): 要访问图库并选择图像,请执行以下操作: pr

我创建了一个按钮,让用户在“用相机拍照”和“从多媒体资料中选择图片”之间进行选择

当拍摄/选择照片时,我会将其显示在下一个活动的ImageView中,我会传递为存储拍摄/选择的照片而创建的文件的URI

当用户使用相机拍照时,它会按预期工作,但当用户从gallery中选择图像时,下一个活动中不会显示图像,尽管两个意图(拍照和选择照片)的编码相同

我的问题:为什么下一个活动中不显示从库中拾取的图像?或者我应该如何继续显示它

打开摄像机的意图(工作正常):

要访问图库并选择图像,请执行以下操作:

private void openGalleryIntent() {
    Log.d(TAG, "Method for Intent Gallery started");
    Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);

    if (galleryIntent.resolveActivity(getPackageManager()) != null) {
        File photoFile = null;
        try {
            photoFile = createImageFile();
        } catch (IOException ex) {
            // Error occurred while creating the File
        }

        if (photoFile != null) {
            Uri photoURI = FileProvider.getUriForFile(this,
                    "com.emergence.pantherapp.fileprovider", photoFile);
            galleryIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            startActivityForResult(galleryIntent, PICK_IMAGE);
        }
    }
}
然后是onActivityResult:(currentPhotoPath是为存储图像而创建的文件的绝对路径)

以下是图像在以下活动中的显示方式:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_modify_picture);

    Intent intent = getIntent();
    String imageUri = intent.getStringExtra("USER_IMAGE");

    if (imageUri != null) {
        Log.d(TAG, imageUri);
    } else {
        Log.d(TAG, "imageUri was null");
    }

    image = findViewById(R.id.picture);

    image.setImageURI(Uri.parse(imageUri));

}

我确保在清单中有READ_EXTERNAL_存储,xml布局只是设置为高度和宽度的“匹配父对象”,但如果相关,我可以添加它们。

很少
意图
操作使用
额外输出
。大多数情况下,这是一个
动作\图像\捕获
的事情

更典型的是,获取一段内容的
意图
ACTION\u PICK
ACTION\u GET\u content
ACTION\u OPEN\u DOCUMENT
ACTION\u CREATE\u DOCUMENT
ACTION\u OPEN\u DOCUMENT\u TREE
,等等)从交付给
onActivityResult()
Intent
中的内容供应商返回一个
Uri。给定您的实现,这将是
data.getData()
,以获取该
Uri`

然后,您可以使用
ContentResolver
openInputStream()
Uri
标识的内容获取
InputStream
。例如,在您的情况下,您可以使用该
InputStream
将字节复制到
FileOutputStream
中,以制作您自己的本地内容副本


请注意。

操作拾取
不使用
额外输出
。请参阅并阅读。@commonware谢谢。您知道如何从我之前创建的文件中的ACTION\u PICK返回的URI复制所选图像吗?使用
ContentResolver
openInputStream()
URI
标识的内容上获取
InputStream
。使用
FileOutputStream
文件所标识的内容上获取
OutputStream
。然后,将
InputStream
中的字节复制到
OutputStream
。我不知道如何将其标记为有效答案。非常好,谢谢你。
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == Activity.RESULT_OK && requestCode == 1) {
        Log.d(TAG, currentPhotoPath);

        Intent intent = new Intent(this, ModifyPictureActivity.class);
        intent.putExtra("USER_IMAGE", currentPhotoPath);
        startActivity(intent);
    } else if (resultCode == Activity.RESULT_OK && requestCode == 2) {
        Log.d(TAG, currentPhotoPath);

        Intent intent = new Intent(this, ModifyPictureActivity.class);
        intent.putExtra("USER_IMAGE", currentPhotoPath);
        startActivity(intent);
    }

}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_modify_picture);

    Intent intent = getIntent();
    String imageUri = intent.getStringExtra("USER_IMAGE");

    if (imageUri != null) {
        Log.d(TAG, imageUri);
    } else {
        Log.d(TAG, "imageUri was null");
    }

    image = findViewById(R.id.picture);

    image.setImageURI(Uri.parse(imageUri));

}