¿Por qué los Cursores Android comienzan antes de la primera fila de resultados y terminan después de la última fila?
Estoy tratando de entender por qué comenzaría el cursor antes de la primera posición en una fila y por qué terminaría después de la última posición. ¿Hay una ventaja inherente a hacerlo de esta manera?
Por ejemplo:
- Consulta de selección en sqlite android
- Acceso a la aplicación de Android Lite para Android
- ¿La implementación de SQLite de Android desinfecta la entrada a través del método SQLiteDatabase.insert ()?
- Tener varios SQLiteOpenhelper en una aplicación Android
- Cursor.moveToNext () devuelve false mientras Cursor.getCount () dice que son más de 1 fila
public abstract int getPosition ()
Desde: API Nivel 1 Devuelve la posición actual del cursor en el conjunto de filas. El valor es cero. Cuando el conjunto de filas se devuelve por primera vez, el cursor estará en la posición -1, que está antes de la primera fila. Después de que se devuelva la última fila, otra llamada a siguiente () dejará el cursor más allá de la última entrada, en una posición de count ().
Devuelve la posición actual del cursor.
Gracias,
- ¿Cuál es el modo de subprocesamiento predeterminado de SQLite en Android?
- Unidad de pruebas de creación de una base de datos SQLite utilizando Spock y Robospock
- Cómo obtener el registro de llamadas desde fecha específica en android
- Marco del cargador vs AsyncTask simple
- Cómo pre-poblar una base de datos DAO sqlite verde
- Patrón de bloqueo de múltiples hilos de SQLiteDatabase
- Opciones de SyncAdapter
- IllegalStateException: Tablas no válidas al intentar consultar la base de datos con ContentProvider
Debido a que un Cursor
no está garantizado para ser poblado con filas. Si obtuviste un Cursor
de una base de datos con 0 filas, la posición inicial en 0 no tiene sentido ya que no hay una fila en la posición 0.
Así que usted puede hacer esto:
Cursor c = db.rawQuery(...); while (c.moveToNext()) { // deal with one row at a time }
Es de lejos la mejor manera de iterar sobre los resultados de un Cursor (ver ¿Cuál es la mejor manera de iterar un Cursor Android? ), Y no funcionaría si no se iniciara antes de la primera fila.
Android SQLiteCursor
es un objeto wrapper para cursor de base de datos SQLite nativo, que es una estructura de control que le permite recorrer registros en una base de datos.
Supongo que antes de llamar a setPosition
o moveToFirst
cursor nativo no carga los resultados de la consulta en la memoria para ahorrar espacio.
- Repita un diseño complejo para cada registro
- No se puede ejecutar el servicio de Google Play en el emulador (es necesario actualizar el servicio de Google Play)