2014-11-13 29 views
11

Qual è Uri Matcher in android.content.UriMatcherSignificato android.content.UriMatcher

Come si usa? Qualcuno può spiegare il significato di seguire tre linee di codice?

uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 
    uriMatcher.addURI(PROVIDER_NAME, "cte", uriCode); 
    uriMatcher.addURI(PROVIDER_NAME, "cte/*", uriCode); 
    int res = uriMatcher.match(uri); 

risposta

31

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; 
} 
+1

"Di solito faccio l'istanza di UriMatcher statica" perché? –

+1

@ 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

5

ho trovato la seguente i video per essere utile:

URI Basics

URI Matcher

In sostanza, ciò che si sta tentando di fare è avere un ID o un numero associato a diversi URI. Quando si utilizza addUri, viene creato un codice/numero/ID rispetto all'URI. Quando si richiede una corrispondenza(), viene restituito il codice corrispondente.