Dato un assoluto Uri
e un relativo Uri
o percorso relativo, come si ottiene l'assoluto Uri
indicando la posizione relativa?Come si risolve un Uri relativo?
Ad esempio, supponiamo di avere lo Uri
per file:///android_asset/dir
, che punta a una posizione nelle nostre risorse. Supponiamo inoltre che altrove, abbiamo un percorso relativo di /foo
. L'assoluto Uri
per quel percorso relativo deve essere file:///android_asset/foo
. C'è qualcosa su Uri
o altrove nell'SDK di Android, che mi manca che mi dia quel risultato Uri
?
Uri.withAppendedPath()
non è la risposta, come tutto sembra fare è gestire finali separatori di directory:
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
, tramite buildUpon()
su Uri
, non è un miglioramento:
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 un pizzico Posso provare a usare java.net.URL
e il suo costruttore URL(URL context, String spec)
, o semplicemente rotolare del codice per questo, ma speravo di rimanere nel regno di Android Uri
valori se possibile, solo per eventuali stranezze che differiscono da URL
e da Uri
.
non è necessario aggiungere la barra per appendPath: lo fa per te. Ho il mio metodo getBaseUriBuilder per ottenere Uri.Builder con schema + root. Quindi tutto ciò che serve è aggiungere il percorso e interrogare i parametri ... –
"Quindi tutto ciò che serve è aggiungere il percorso" - ci sono molte possibili strutture di percorso relative. '/ foo' è solo uno. C'è anche 'pippo','./Foo', '../ pippo',' ../../ foo/barra', e così via. Molti useranno parte del percorso dell'assoluto 'Uri', altri no (ad es. '/ Foo') no. Sto cercando di gestire tutte le situazioni, se possibile. – CommonsWare
vedi Costruttori di file: 'File (dir file, nome stringa)' e/o 'File (stringa dirPath, nome stringa)' e 'File # getCanonicalPath()' – pskink