簡體   English   中英

如何從java.net.URL創建android.net.Uri?

[英]How to create a android.net.Uri from a java.net.URL?

我想use intent.setData(Uri uri)來傳遞從URL獲取的數據。 為了做到這一點,我需要能夠從URL(或從我從URL讀取的byte []或我從byte[]等創建的ByteArrayInputStream創建一個Uri。 但是,我無法弄清楚應該怎么做。

那么,無論如何從URL獲取的數據創建Uri而不首先將數據寫入本地文件?

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

例:

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

確保處理相關的異常,例如URISyntaxException

我想你的答案可以在這里找到..

Uri.Builder.build()在普通URL上工作得很好,但是它支持端口號失敗。

我發現使其支持端口號的最簡單方法是首先解析給定的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

如何從URL創建Uri?

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

請注意,在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();
}

要處理查詢字符串,您需要解析此處所述的url.getQuery(),然后將其提供給構建器。 appendQueryParameter()。

try {
    uri = new URI(url.toString());
} catch (URISyntaxException e) {
}
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) {
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM