Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cursor while loop returning every value but the last

I am using a while loop to iterate through a cursor and then outputing the longitude and latitude values of every point within the database.

For some reason it is not returning the last (or first depending on if I use Cursor.MoveToLast) set of longitude and latitude values in the cursor.

Here is my code:

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

From this I am getting:

*******************************************
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 Sets of values, where I should be getting 8 sets.

Thanks.

like image 827
jcrowson Avatar asked Apr 02 '10 15:04

jcrowson


2 Answers

moveToNext() has two features. It returns a boolean signifying that there is a next, but at the same time it goes ahead and moves the 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());
}
like image 106
Parker Avatar answered Sep 29 '22 04:09

Parker


Cursor c=null;
c=......;
try {
    if (c!=null) {
        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

        }

    }
} finally {
    if (c!=null) {
        c.close();
    }
}
like image 26
Pentium10 Avatar answered Sep 29 '22 04:09

Pentium10