Учитывая абсолютное значение 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
В pinch Я могу попробовать использовать java.net.URL
и его конструктор URL(URL context, String spec)
, или просто прокрутить код для него, но я надеялся остаться в сфере Android Uri
, если это возможно, только для любых дифференциалов, отличных от URL
и Uri
.
не нужно добавлять косую черту для appendPath - это делает это за вас. У меня есть метод getBaseUriBuilder, чтобы получить Uri.Builder со схемой + root. Итак, все, что вам нужно, это добавить параметры пути и запроса ... –
«Так что вам нужно только добавить путь» - существует много возможных относительных структур пути. '/ foo' - это всего лишь один. Также есть 'foo','./Foo', '../ foo',' ../../ foo/bar' и т. Д. Многие будут использовать часть пути абсолютного 'Uri', другие (например,'/foo') не будут. Я стараюсь обрабатывать все ситуации, если это возможно. – CommonsWare
см. Раздел «Файл»: «Файл (файл, имя строки)» и/или «Файл (String dirPath, String name)» и «Файл # getCanonicalPath()» – pskink