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

后端 未结 6 671
南方客
南方客 2020-12-15 04:21

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

相关标签:
6条回答
  • 2020-12-15 04:25
    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) {
    }
    
    0 讨论(0)
  • 2020-12-15 04:29

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

    0 讨论(0)
  • 2020-12-15 04:35
    try {
        uri = new URI(url.toString());
    } catch (URISyntaxException e) {
    }
    
    0 讨论(0)
  • 2020-12-15 04:44

    From How to create a Uri from a URL?

    Uri uri =  Uri.parse( "http://www.facebook.com" );
    
    0 讨论(0)
  • 2020-12-15 04:45

    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.

    0 讨论(0)
  • 2020-12-15 04:47

    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

    0 讨论(0)
提交回复
热议问题