将java.net.URI转换为android.net.Uri

26
我能找到如何将android.net.Uri转换为Java.net.URI的方法在这里,但不能反过来转换。
因此我花了一些时间来解决这个问题。以下是解决方案(如果有其他解决方案,请也发布出来)。
首先将javaURI转换为字符串,然后使用android.net.Uri的解析函数。
android.net.URI androidUri = android.net.Uri.parse(javaURI.toString());

可能是重复的问题:android.net vs java.net和不同的URI类 - sTg
3个回答

33

http://developer.android.com/reference/android/net/Uri.html#parse(java.lang.String)


public static Uri parse (String uriString)

创建Uri,解析给定的编码URI字符串。

参数
uriString:符合RFC 2396标准的已编码URI

返回值
返回给定uri字符串的Uri

抛出
如果uriString为null,则抛出NullPointerException异常


因此,以下是一个示例:

android.net.Uri.parse(new java.net.URI("").toString());

不用说,要使用真正的java.net.URI...;)


1
这也意味着您可以在本地JVM上运行单元测试,而不必担心Android SDK的存在,因此使生活变得更加轻松。 - Graham Smith

4

如果有人看到这个,我用以下代码成功解决了问题:

URI oldUri;
Uri newUri  = new Uri.Builder().scheme(oldUri.getScheme())
                    .encodedAuthority(oldUri.getRawAuthority())
                    .encodedPath(oldUri.getRawPath())
                    .query(oldUri.getRawQuery())
                    .fragment(oldUri.getRawFragment())
                    .build();

基本上,获取每个URI组件并将其传递给构建器(因为似乎没有一种方法可以传递整个URI字符串)。


8
Uri newUri = Uri.parse(oldUri.toString()); - 嗯... - user1974640
真是太棒了 @saleemrashid1 - user3746280
你为什么要做这样的事情? - animaonline
1
因为android.net.Uri已经有一个解析方法,所以被踩了。 - GabrielBB
感谢您提供的解决方案。您可能需要添加一行代码来处理包含端口号的URI。 - George

1
uri = Uri.parse(mFile.toString());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接