Я использую некоторое время цикл для итерации через курсор и затем вывод значения долготы и широты каждой точки в базе данных.
По некоторым причинам это не возвращает последнее (или сначала в зависимости от того, если я использую Курсор. 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();
}
}
Вы только что выполнили запрос. Разве вы не можете просто избавиться от 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);
}
}
Фактически вы пропускаете первое значение, а не последнее.
trackCursor.moveToFirst();
while (trackCursor.moveToNext()) {
В первый раз в цикле while вы указываете на вторую строку.
Я бы преобразовал ваш цикл while в цикл do-while