Reputation: 20100
I would like to use intent.setData(Uri uri)
to pass data obtained from a URL. In order to do this, I need to be able to create a Uri from a URL (or from a byte[] I read from the URL, or a ByteArrayInputStream
I create from the byte[]
, etc). However, I cannot figure out how this is supposed to be done.
So, is there anyway to create a Uri from data obtained from a URL without first writing the data to a local file?
Upvotes: 27
Views: 78446
Reputation: 152
From How to create a Uri from a URL?
Uri uri = Uri.parse( "http://www.facebook.com" );
Upvotes: 11
Reputation: 5659
Note that in Android, Uri's are different from Java URI's. Here's how to avoid using hardcoded strings, and at the same time, create a Uri with just the path portion of the http URL string encoded to conform to RFC2396:
Sample Url String:
String thisUrl = "http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value"
method:
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();
}
To handle query strings you will need to parse the url.getQuery() as described here and then feed that into builder. appendQueryParameter().
Upvotes: 4
Reputation: 89199
Use URL.toURI()
(Android doc) method.
Example:
URL url = new URL("http://www.google.com"); //Some instantiated URL object
URI uri = url.toURI();
Make sure to handle relevant exception, such as URISyntaxException
.
Upvotes: 42
Reputation:
try {
uri = new URI(url.toString());
} catch (URISyntaxException e) {
}
Upvotes: 2
Reputation: 424
I think your answer can be found from here..
Uri.Builder.build()
works quite well with normal URLs, but it fails with port number support.
The easiest way that I discovered to make it support port numbers was to make it parse a given URL first then work with it.
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();
Source : http://twigstechtips.blogspot.com/2011/01/android-create-url-using.html
Upvotes: 13