如何从java.net.URL创建android.net.Uri?

时间:2011-11-23 09:51:46

标签: java android

我希望use intent.setData(Uri uri)传递从网址获取的数据。为了做到这一点,我需要能够从URL(或从URL中读取的byte []或从ByteArrayInputStream创建的byte[]等)创建Uri。 。但是,我无法弄清楚应该怎么做。

那么,无论如何都要从URL获取的数据创建Uri而不先将数据写入本地文件?

6 个答案:

答案 0 :(得分:43)

使用URL.toURI()Android doc)方法。

示例:

URL url = new URL("http://www.google.com"); //Some instantiated URL object
URI uri = url.toURI();

确保处理相关例外,例如URISyntaxException

答案 1 :(得分:11)

我认为你的答案可以从这里找到..

Uri.Builder.build()可以很好地处理普通网址,但是在端口号支持下失败了。

我发现使其支持端口号的最简单方法是首先解析给定的URL,然后使用它。

Uri.Builder b = Uri.parse("http://www.yoursite.com:12345").buildUpon();

b.path("/path/to/something/");
b.appendQueryParameter("arg1", String.valueOf(42));

if (username != "") {
  b.appendQueryParameter("username", username);
}

String url = b.build().toString(); 

来源:http://twigstechtips.blogspot.com/2011/01/android-create-url-using.html

答案 2 :(得分:8)

来自How to create a Uri from a URL?

Uri uri =  Uri.parse( "http://www.facebook.com" );

答案 3 :(得分:3)

请注意,在Android中,Uri与Java URI不同。以下是如何避免使用硬编码字符串,同时创建一个Uri,只使用编码为符合RFC2396的http URL字符串的路径部分:

示例网址字符串:

String thisUrl = "http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value"

方法:

private Uri.Builder builder;
public Uri getUriFromUrl(String thisUrl) {
    URL url = new URL(thisUrl);
    builder =  new Uri.Builder()
                            .scheme(url.getProtocol())
                            .authority(url.getAuthority())
                            .appendPath(url.getPath());
    return builder.build();
}

要处理查询字符串,您需要按照here所述解析url.getQuery(),然后将其提供给构建器。 appendQueryParameter()。

答案 4 :(得分:2)

try {
    uri = new URI(url.toString());
} catch (URISyntaxException e) {
}

答案 5 :(得分:0)

URI uri = null;
URL url = null;

// Create a URI
try {
    uri = new URI("www.abc.com");
} catch (URISyntaxException e) {
}

// Convert an absolute URI to a URL
try {
    url = uri.toURL();
} catch (IllegalArgumentException e) {
    // URI was not absolute
} catch (MalformedURLException e) {
}

// Convert a URL to a URI
try {
    uri = new URI(url.toString());
} catch (URISyntaxException e) {
}