Android Cursor con ORMLite para usar en CursorAdapter

¿Hay alguna manera, cómo obtener Cursor para una consulta, que estoy procesando con el objeto Dao ORMLite?

ORMLite ahora es compatible con los métodos next() , previous() , moveRelative(offset) , … en la clase CloseableIterator . Esto debería permitirle mover el objeto Cursor subyacente a voluntad.

También es compatible con los siguientes métodos DAO Cursor:

  • dao.mapSelectStarRow(databaseResults) Devuelve la última fila de los resultados de la base de datos de una consulta para select * . Con esto puede cambiar la ubicación del cursor (por ejemplo) y luego obtener el objeto actual.
  • dao.getSelectStarRowMapper() Proporciona un asignador que puede usar para asignar el objeto fuera del Dao.

Cuando construye su propia consulta con ORMLite , utiliza el objeto QueryBuilder . queryBuilder.prepare() devuelve un PreparedQuery que es usado por varios métodos en el DAO. Puede llamar a dao.iterator(preparedQuery) que devolverá un CloseableIterator que se utiliza para iterar a través de los resultados. Hay un iterator.getRawResults() para acceder a la clase DatabaseResults . En Android, esto se puede convertir en un AndroidDatabaseResults que tiene un método getCursor() para devolver el Cursor Android.

Algo como el siguiente código:

 // build your query QueryBuilder qb = fooDao.queryBuilder(); qb.where()...; // when you are done, prepare your query and build an iterator CloseableIterator iterator = dao.iterator(qb.prepare()); try { // get the raw results which can be cast under Android AndroidDatabaseResults results = (AndroidDatabaseResults)iterator.getRawResults(); Cursor cursor = results.getRawCursor(); ... } finally { iterator.closeQuietly(); } 

Esto es un poco complicado pero definitivamente tienes que mirar detrás del valle para llegar a este objeto que está oculto por las clases de abstracción de la base de datos.

¿Has probado algunos de los consejos de Gray de esta publicación? Explica cómo puede seleccionar una columna como otro nombre, como, por ejemplo, seleccionar id como _id.

Si estás en una actividad y no quieres perder el tiempo con el QueryBuilder, da el siguiente bash, que es igual de efectivo.

 Cursor cursor = getHelper().getReadableDatabase().query(tableName, projection, selection, selectionArgs, groupBy, having, sortOrder) 

Si se getHelper() al método getHelper() para llegar a los métodos de dao, etc., solo tiene que heredar de OrmLiteBaseActivity y puede llamarlo. Se verá así:

 public class YourClass extends OrmLiteBaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { ... getHelper().getDao().queryForAll(); ... } } 

Si se refiere al cursor para manejar el funcionamiento de la base de datos: ¡no creo que pueda alcanzarlo! Pero no entiendo por qué deberías necesitarlo. ORMLite tiene casi todas las funciones del cursor. Entonces, ¿para qué lo necesitas?