Gegeben eine absolute Uri
und eine relative Uri
oder relativen Pfad, wie erhalten Sie die absolute Uri
zeigt auf die relative Position?Wie lösen Sie einen relativen Uri auf?
Nehmen wir zum Beispiel an, wir haben die Uri
für , zeigt auf einen Speicherort in unseren Vermögenswerten. Nehmen wir weiterhin an, dass wir anderswo einen relativen Pfad von /foo
haben. Der absolute Uri
für diesen relativen Pfad sollte file:///android_asset/foo
lauten. Gibt es etwas unter Uri
oder anderswo im Android SDK, das ich vermisse, das mir das Ergebnis Uri
gibt?
Uri.withAppendedPath()
nicht die Antwort ist, wie alle es ist handHinterVerzeichnisTrenn zu tun scheint:
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
über buildUpon()
auf Uri
, ist keine Verbesserung:
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
In einem Prise Ich kann java.net.URL
und seine URL(URL context, String spec)
Konstruktor versuchen, oder nur etwas Code für sie rollen, aber ich hatte gehofft, im Reich von Androidzu bleibenWerte wenn möglich, nur für alle Macken zu unterscheiden URL
und Uri
.
keine Notwendigkeit, Schrägstrich für appendPath hinzufügen - es tut es für Sie. Ich habe meine Methode getBaseUriBuilder, um Uri.Builder mit schema + root zu erhalten. Alles, was Sie brauchen, ist Pfad- und Abfrageparameter ... –
"Also alles, was Sie brauchen, ist Pfad anhängen" - es gibt viele mögliche relative Pfadstrukturen. '/ foo' ist nur eins. Es gibt auch 'foo','./Foo', '../ foo',' ../../ foo/bar' und so weiter. Viele benutzen einen Teil des Pfades des absoluten 'Uri', andere (z.B.'/foo') nicht. Ich versuche, wenn möglich alle Situationen zu bewältigen. – CommonsWare
siehe File construtors: 'File (Datei dir, String name)' und/oder 'File (String dirPath, String name)' und 'File # getCanonicalPath()' – pskink