2010-07-24 13 views
14

Ho un ContentProvider personalizzato che utilizzo per archiviare le correzioni ottenute dal GPS in un database SQLite. Questa classe sovrascrive i metodi di ContentProvider (cancella, inserisci, query ...), ma nota che ho incluso anche un metodo per interrogare l'ultima correzione.Android: chiama i metodi personalizzati in ContentProvider

public class FixesContentProvider extends ContentProvider { 
    @Override 
    public int delete(...) { ... } 
    ... 
    @Override 
    public Cursor query(...) { ... } 

    public Cursor getLastFix(Uri uri) { ... } 
} 

E 'abbastanza facile per interrogare i dati di altri servizi o attività chiamando getContentResolver().

ContentResolver cR = getContentResolver(); 
Cursor fixes = cR.query(CONTENT_URI, ...); 

ma io non sono in grado di chiamare il mio metodo personalizzato (FixesContentProvider#getLastFix). Come posso chiamare i metodi personalizzati definiti in ContentProvider?

Forse non capisco come ContentProviders/ContentResolvers funzionano in questo caso, ma lo Android documentation provided by Google ufficiale non è molto chiaro in questo senso.

risposta

13

ma io non sono in grado di chiamare il mio metodo personalizzato (FixesContentProvider#getLastFix).

Questo è completamente vero. In questo caso, tuttavia, è possibile trarre vantaggio da un fatto: entrambi i metodi query e getLastFix restituiscono un oggetto Cursor. Quindi, quello che faccio aggiungerebbe un valore all'URI che passerai a query e, quindi, decidi cosa vuoi fare realmente: query o getLastFix. Per esempio:

public Cursor query(Uri uri,...) { 
    if (uri says it has to return the last fix) 
     return getLastFix(uri); 
    // otherwise, do normal operations... 
    return cursor; 
} 

Infatti, il metodo query è supponiamo di restituire un risultato, dato un Uri. Quindi, se è necessario recuperare l'ultima correzione, è necessario specificare nell'URI che si desidera l'ultima correzione.

+0

Questo è quello che ho fatto. Ho usato UriMatcher.addUri per abbinare "content: // xxx/fixes" e "content: // xxx/fixes/last" a due codici diversi, agendo di conseguenza (come proposto) in uno switch (myUriMatcher.match (uri)) {caso CODICE_1: xxx; caso CODICE_2: yyy; }. Grazie mille. –

Problemi correlati