Учитывая абсолютный Uri
и относительный Uri
или относительный путь, как вы получаете абсолютное Uri
, указывающее на относительное местоположение?
Например, предположим, что мы имеем Uri
для file:///android_asset/dir
, указывая на местоположение в наших активах. Предположим далее, что в другом месте мы имеем относительный путь /foo
. Абсолютный Uri
для этого относительного пути должен быть file:///android_asset/foo
. Есть ли что-то на Uri
или в другом месте Android SDK, которое мне не хватает, что дает мне этот результат Uri
?
Uri.withAppendedPath()
не является ответом, поскольку все, что ему кажется, это обработать трейлинг-сепараторы каталога:
Uri abs=Uri.parse("file:///android_asset/");
Uri rel=Uri.withAppendedPath(abs, "/foo");
Assert.assertEquals("file:///android_asset/foo", rel.toString());
// actually returns file:///android_asset//foo
Uri abs2=Uri.parse("file:///android_asset/dir");
Uri rel2=Uri.withAppendedPath(abs2, "/foo");
Assert.assertEquals("file:///android_asset/foo", rel2.toString());
// actually returns file:///android_asset/dir//foo
Uri.Builder
, через buildUpon()
на Uri
, не является улучшением:
Uri rel3=abs.buildUpon().appendPath("/foo").build();
Assert.assertEquals("file:///android_asset/foo", rel3.toString());
// actually returns file:///android_asset/%2Ffoo
Uri rel4=abs.buildUpon().appendEncodedPath("/foo").build();
Assert.assertEquals("file:///android_asset/foo", rel4.toString());
// actually returns file:///android_asset//foo
В крайнем случае я могу попробовать использовать java.net.URL
и его конструктор URL(URL context, String spec)
, или просто отбросить код для него, но я надеялся остаться в области значений Android Uri
, если это возможно, только для любых причуд дифференцируя URL
и Uri
.