如何从URL创build一个URI?

我想use intent.setData(URI)来传递从URL获得的数据。 为了做到这一点,我需要能够从一个URL(或从我从URL读取的byte [],或从byte[]创build的ByteArrayInputStream等)创build一个URI。 但是,我无法弄清楚这是如何完成的。

那么,无论如何,在没有首先将数据写入本地文件的情况下,从通过URL获取的数据创buildURI?

Solutions Collecting From Web of "如何从URL创build一个URI?"

使用URL.toURI() ( Android文档 )方法。

例:

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

确保处理相关exception,例如URISyntaxException

我想你的答案可以从这里find..

Uri.Builder.build()对于普通的URL来说工作得很好,但是对端口号的支持却失败了。

我发现使其支持端口号的最简单的方法是先parsing给定的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

请注意,在Android中,Uri与Java URI不同。 以下是如何避免使用硬编码的string,同时创build一个Uri,只需将http URLstring的path部分编码为符合RFC2396:

urlstring示例:

 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(); } 

要处理查询string,您需要按照此处所述parsingurl.getQuery(),然后将其提供给构build器。 appendQueryParameter()。

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

从如何创build一个URL的Uri?

 Uri uri = Uri.parse( "http://www.facebook.com" ); 
 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) { } 

我们可以parsing来自Uri的任何URL

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