Курсор, в то время как цикл возвращает каждое значение, но последнее

Я использую цикл while для итерации курсора, а затем вывод значений долготы и широты каждой точки в базе данных.

По какой-то причине он не возвращает последний (или первый в зависимости от того, использует ли я Cursor.MoveToLast) набор значений долготы и широты в курсоре.

Вот мой код:

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); } } 

Из этого я получаю:


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 .out (10551): 4,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): 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 Устанавливает значения, где я должен получать 8 наборов.

Благодарю.

Функция moveToNext () имеет две функции. Он возвращает логическое значение, означающее, что есть следующий, но в то же время он идет вперед и перемещает курсор.

 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(); } } 

Ваше пропущенное первое значение фактически, а не последнее.

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

Первый раз в цикле while вы указываете на вторую строку.

Я бы преобразовал цикл while в цикл do-while

Вы просто выполнили запрос. Не можете ли вы просто избавиться от 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); } }