【问题标题】:Getting an image from a gallery in android studion - irrelevant code从 android studio 中的画廊获取图像 - 无关代码
【发布时间】:2017-11-02 12:39:30
【问题描述】:

我使用了@AlexanderZaldostanov code,效果很好

但是我对部分代码有一个问题,该部分似乎无关紧要,最终没有被使用。

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        cursor.close();

        ImageView imageView = (ImageView) findViewById(R.id.imgView);

        Bitmap bmp = null;
        try {
            bmp = getBitmapFromUri(selectedImage);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        imageView.setImageBitmap(bmp);

    }


}

String[] filePathColumn = { MediaStore.Images.Media.DATA }; 行的开头一直到cursor.close(); 最后Bitmap 得到Uri 就是这样。

为什么我们需要中间的所有其余代码?

谢谢,

【问题讨论】:

  • 我的感觉是你应该可以使用selectedImage 加载图像只需使用imageView.setImageURI(selectedImage)

标签: java android image-gallery


【解决方案1】:

如果您需要在Imageview 中捕获图像,则可以使用imageView.setImageURI(selectedImage)

简单地显示到Imageview
  @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();

        ImageView imageView = (ImageView) findViewById(R.id.imgView);
        imageView.setImageURI(selectedImage);         

    }    

}

以及当您需要在服务器中上传图像时所需的图像路径,然后该代码用于获取图像的路径。

它将从图像 URI 中获取原始路径。

【讨论】:

    【解决方案2】:

    因为当您从图库中选择图像时,您从不同部分选择相同图像的可能性不同。假设您可以从folder A 中选择一张图片,也可以从recents 中获取相同的图片。

    例如:从画廊它可能会给你

    content://media/external/images/media/123
    

    从最近它可能会给content://com.android.providers.media.documents/document/image:132

    返回的内容 URI 可能会有所不同,具体取决于选择的来源。特别是自从 Kitkat(API 级别 19)引入了存储访问框架 (SAF) 以来,您可以在选择照片时查看所有文档存储提供程序。

    那里的代码会返回图片文件的直接文件系统路径

    【讨论】:

    • 请在投票前给出解释
    • 是的,你是对的 @Anonymous 一些好友故意对你的帖子投反对票,我认为这是一个很好的答案,让那些人感到羞耻
    【解决方案3】:

    为什么我们需要中间的所有其余代码?

    你没有。

    而且由于该代码相当糟糕,因此您一开始就不应该使用它。 Uri 不是文件,它不必指向文件,无论 Uri 来自 MediaStore 还是其他任何地方。

    【讨论】:

      【解决方案4】:

      如果您只想从Uri 获取Bitmap,则不需要中间的代码。

      如果你想要图像的路径,例如。将文件上传到远程服务器,然后该代码用于获取图像的路径。但是你不应该依赖这种方法来获取图像的路径。

      【讨论】:

      • "那么该代码用于获取图像的路径" -- 只有当Uri 具有content 方案并且来自MediaStore 时,该代码才有效。即使这样,生成的路径也可能无法使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 2014-02-03
      • 2012-02-23
      • 1970-01-01
      相关资源
      最近更新 更多