java net 安卓,Android-如何将android.net.Uri对象转换为java.net.URI对象?

我试图在用户从图片库中选择的图像上获得FileInputStream对象。 这是android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI返回的android URI

content://media/external/images/media/3

当我尝试从这个对象构造一个java URI对象时,我得到一个带有异常描述的IllegalArgumentException:URI中的预期文件方案:content:// media / external / images / media / 3而android URI将该方案显示为 内容

更新:

从未找到原始问题的解决方案。 但是如果你想要图片库中图像的字节流,这段代码就可以做到。

Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);

ByteArrayOutputStream bytes = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());

您可以结合使用基于Uri的Java Uri构造函数来使用android Uri的toString方法。

android.net.Uri auri = new android.net.Uri(what ever);

java.net.URI juri = new java.net.URI(auri.toString());

Android URI |

Java URI

谢谢。试过了。它给出了一个异常(java.net.URI应该有一个有效的方案)

这是错误的,如果URI包含需要编码的字符(如空格),则会失败。 android.net.Uri.toString()解码编码字符,如果你尝试在非编码字符串上构造它,java.net.URI将抛出异常。正确的解决方案huri = new java.net.URI(URLEncoder.encode(auri.toString(),"UTF-8"));

@Jeffrey:Uri.toString()在我的Android 4.1.2设备上返回编码字符

@RmyDAVID它没有。我试过了。对于带有空格的a.n.Uri,空间不会被编码。自己试试:Uri.parse("content:foo.bar.com0?file=my goodness").toString()。你是正确的,javadocs声明它返回一个编码的字符串,但它没有说明使用了什么样的编码。

找到从内容URI打开InputStream的正确方法:

InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri);

就这样!

谢谢!!!这么简单,我知道它在某处。接受的答案在某些情况下可能有效,但在所有情况下似乎都不安全/有效。

非常感谢!!!!当您需要从内置库中拾取的图像中获取byte []时,可以充当魅力!

此力关闭我的应用程序并打开Binder.class,没有附加任何来源。我发送的是Contacts.CONTENT_VCF_URI

我投了jgilrincon的回答。我不能评论由于声誉低,这里有一些额外的信息 - 您可以使用Apache Cordova项目的FileHelper.java,它具有从Uri字符串处理文件所需的功能,同时考虑到mediastore(以及app assets文件夹) )

特别是这个方法提供了来自Uri的InputStream:

public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)

您的原始问题有一个解决方案(将Uri转换为URI):

获取真正的文件路径(查看此代码:从mediastore获取URI的文件名和路径)

使用实际路径和构造函数获取URI:URI(String uri)

如果您需要更多详细信息,请查看此处:

如何使用ACTION_VIDEO_CAPTURE删除使用Intent录制的视频?

由于String构造不起作用,你是否尝试过构建它自己?

android.net.URI auri = new android.net.URI(what ever);

java.net.URI juri = new java.net.URI(auri.getSchema(),

auri.getSchemaSpecificPart(),

auri.getFragment());

您可能还想仔细检查从Android URI类中获取有效数据。我的另一个答案中列出的文档讨论了它几乎没有错误检查。如果存在实际错误,那么类无论如何都会吐出垃圾并且不会抛出任何异常。这很可能是为什么执行验证的java类抛出异常的原因。

谢谢Brian。 uri由android本身返回。它包含手机图片库中图像的路径。所以不能对图像做任何事情。我试着在问题中发布uri

我认为你的意思是getScheme和getSchemeSpecificPart,对吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值