27

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?

5 Answers 5

42

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.

Sign up to request clarification or add additional context in comments.

5 Comments

toURI returns "URI" from net package, setData method needs "Uri"
This does not take into account the special characters that a parameter might have.
@QualtarDemix that is not what was asked by the OP. I provided a solution based on this requirement.
@BuhakeSindi: Well that is implicit. The idea is to get the best possible solution. Even if that wasn't explicitly asked.
Suppose http is not part of the url string?
13

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

1 Comment

Also, instead of hardcoding "http://...", you could use yourUrlVariable.toString() instead.
11

From How to create a Uri from a URL?

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

Comments

4

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().

Comments

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

1 Comment

Cannot instantiate the type Uri

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.