2010-07-24 14 views
14

Tengo un ContentProvider personalizado que uso para almacenar arreglos obtenidos del GPS en una base de datos SQLite. Esta clase anula los métodos de ContentProvider (eliminar, insertar, consultar ...), pero observe que también incluí un método para consultar la última corrección.Android: llamar a métodos personalizados en ContentProvider

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

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

es bastante fácil para consultar datos de otros servicios o actividades llamando getContentResolver().

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

pero no soy capaz de llamar a mi método personalizado (FixesContentProvider#getLastFix). ¿Cómo podría llamar a métodos personalizados definidos en ContentProvider?

Tal vez no entiendo cómo funcionan los ContentProviders/ContentResolvers en este caso, pero el Android documentation provided by Google oficial no es muy claro en este sentido.

Respuesta

13

pero no soy capaz de llamar a mi método personalizado (FixesContentProvider#getLastFix).

Eso es completamente cierto. Sin embargo, en este mismo caso, puede aprovechar un hecho: los métodos query y getLastFix devuelven un objeto Cursor. Entonces, lo que hago sería agregar algún valor al URI que pasas al query y luego decidir qué quieres hacer realmente: query o getLastFix. Por ejemplo:

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

De hecho, el método query se supone que debe devolver un resultado, dada una Uri. Por lo tanto, si necesita recuperar la última solución, debe especificar en el URI que desea la última solución.

+0

Eso es lo que hice. He usado UriMatcher.addUri para hacer coincidir "contenido: // xxx/fixes" y "contenido: // xxx/fixes/last" con dos códigos diferentes, actuando en consecuencia (como usted propone) en un modificador (myUriMatcher.match (uri)) {case CODE_1: xxx; case CODE_2: yyy; }. Muchas gracias. –

Cuestiones relacionadas