26

I am able to find how to convert android.net.Uri to Java.net.URI here but not vice-versa.

So after spending some time I figured it out. Here is the solution(If there is another solution then please post that as well)

First convert javaURI to string and then use android.net.Uri's parse function

android.net.URI androidUri = android.net.Uri.parse(javaURI.toString());
Community
  • 1
  • 1
Mayank Rana
  • 281
  • 1
  • 3
  • 6
  • possible duplicate of [android.net vs java.net and the different URI classes](http://stackoverflow.com/questions/7971275/android-net-vs-java-net-and-the-different-uri-classes) – sTg Jul 22 '15 at 10:51

3 Answers3

33

http://developer.android.com/reference/android/net/Uri.html#parse(java.lang.String)

public static Uri parse (String uriString)

Creates a Uri which parses the given encoded URI string.

Parameters
uriString: an RFC 2396-compliant, encoded URI

Returns
Uri for this given uri string

Throws
NullPointerException if uriString is null


Therefore, here is an example:

android.net.Uri.parse(new java.net.URI("").toString());

Goes without saying, use the real java.net.URI in it... ;)

  • 1
    This also means you can run Unit Tests on the local JVM without worrying about the Android SDK being present therefore making life a lot easier. – Graham Smith May 05 '16 at 14:52
4

For anyone coming across this, I had success with the following code:

URI oldUri;
Uri newUri  = new Uri.Builder().scheme(oldUri.getScheme())
                    .encodedAuthority(oldUri.getRawAuthority())
                    .encodedPath(oldUri.getRawPath())
                    .query(oldUri.getRawQuery())
                    .fragment(oldUri.getRawFragment())
                    .build();

Basically, get each URI component and pass it to the builder (as there does not seem to be a way to pass in a whole URI string.

1
uri = Uri.parse(mFile.toString());
sivi
  • 10,654
  • 2
  • 52
  • 51