UriMatcher è una classe a portata di mano quando si scrive un ContentProvider o qualche altra classe che ha bisogno di rispondere a una serie di diversi URI. Nel tuo esempio, un utente potrebbe interrogare il provider con URI come ad esempio:
myprovider://cte
o
myprovider://cte/somestring
Quando si costruisce un UriMatcher, è necessario disporre di codici separati per ogni URI (non solo "uriCode "come nel tuo esempio). Di solito io faccio il mio esempio UriMatcher statica, e aggiungi gli URI in un costruttore statico:
private static final int CTE_ALL = 1;
private static final int CTE_FIND = 2;
private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
uriMatcher.addURI(PROVIDER_NAME, "cte", CTE_ALL);
uriMatcher.addURI(PROVIDER_NAME, "cte/*", CTE_FIND);
}
Poi, nel tuo ContentProvider si farebbe qualcosa di simile nel tuo metodo di ricerca:
Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
int res = uriMatcher.match(uri);
switch (res) {
case CTE_ALL:
//TODO create a results Cursor with all the CTE results
break;
case CTE_FIND:
//TODO create a results Cursor with the single CTE requested
break;
}
return results;
}
"Di solito faccio l'istanza di UriMatcher statica" perché? –
@ Il blocco staitc di MarianPaździoch viene chiamato quando la classe viene sottoposta a laici prima di qualsiasi creazione di oggetto. Questo rende pronto l'uri matcher durante il caricamento della classe .. – W00di