Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cursor while loop devuelve cada valor pero el último

Estoy utilizando un bucle de tiempo para iterar a través de un cursor y luego la salida de los valores de longitud y latitud de cada punto dentro de la base de datos.

Por alguna razón no está devolviendo el último (o primero dependiendo de si uso Cursor.MoveToLast) conjunto de longitud y valores de latitud en el cursor.

Aquí está mi código:

public void loadTrack() { SQLiteDatabase db1 = waypoints.getWritableDatabase(); Cursor trackCursor = db1.query(TABLE_NAME, FROM, "trackidfk=1", null, null, null,ORDER_BY); trackCursor.moveToFirst(); while (trackCursor.moveToNext()) { Double lat = trackCursor.getDouble(2); Double lon = trackCursor.getDouble(1); //overlay.addGeoPoint( new GeoPoint( (int)(lat*1E6), (int)(lon*1E6))); System.out.println(lon); System.out.println(lat); } } 

De esto estoy consiguiendo:


04-02 15: 39: 07.416 INFO / System.out (10551): 3.0 04-02 15: 39: 07.416 INFO / System.out (10551): 5.0 04-02 15: 39: 07.416: INFO / System (10551): 04 04-02 15: 39: 07.416: INFO / System.out (10551): 5.0 04-02 15: 39: 07.416: INFO / System.out (10551): 5.0 04-02 15: 39: 07.416: INFO / System.out (10551): 5.0 04-02 15: 39: 07.416 INFO / System.out (10551): 4.0 04-02 15: 39: 07.416 INFO / System.out (10551) : 4.0 04-02 15: 39: 07.416: INFO / System.out (10551): 3.0 04-02 15: 39: 07.416 INFO / System.out (10551): 3.0 04-02 15: 39: 07.416: INFO /System.out(10551): 2.0 04-02 15: 39: 07.416: INFO / System.out (10551): 2.0 04-02 15: 39: 07.493: INFO / System.out (10551): 1.0 04-02 15: 39: 07.493: INFO / System.out (10551): 1.0


7 Conjuntos de valores, donde debería estar obteniendo 8 conjuntos.

Gracias.

4 Solutions collect form web for “Cursor while loop devuelve cada valor pero el último”

MoveToNext () tiene dos características. Devuelve un booleano que indica que hay un siguiente, pero al mismo tiempo se adelanta y mueve el cursor.

 public void loadTrack() { SQLiteDatabase db1 = waypoints.getWritableDatabase(); Cursor trackCursor = db1.query(TABLE_NAME, FROM, "trackidfk=1", null, null, null,ORDER_BY); trackCursor.moveToFirst(); do { Double lat = trackCursor.getDouble(2); Double lon = trackCursor.getDouble(1); //overlay.addGeoPoint( new GeoPoint( (int)(lat*1E6), (int)(lon*1E6))); System.out.println(lon); System.out.println(lat); } while (trackCursor.moveToNext()); } 
 Cursor c=null; c=......; try { if (c!=null) { for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { } } } finally { if (c!=null) { c.close(); } } 

Su salto el primer valor en realidad, no el último.

 trackCursor.moveToFirst(); while (trackCursor.moveToNext()) { 

La primera vez en el bucle while está apuntando a la segunda fila.

Convertiría su bucle while en un bucle do-while

Acaba de ejecutar la consulta. ¿No puedes simplemente deshacerte de moveToFirst ()?

 public void loadTrack() { SQLiteDatabase db1 = waypoints.getWritableDatabase(); Cursor trackCursor = db1.query(TABLE_NAME, FROM, "trackidfk=1", null, null, null,ORDER_BY); while (trackCursor.moveToNext()) { Double lat = trackCursor.getDouble(2); Double lon = trackCursor.getDouble(1); //overlay.addGeoPoint( new GeoPoint( (int)(lat*1E6), (int)(lon*1E6))); System.out.println(lon); System.out.println(lat); } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.