2010-04-02 84 views
6

Tôi đang sử dụng một vòng lặp while để lặp qua con trỏ và sau đó xuất các giá trị kinh độ và vĩ độ của mọi điểm trong cơ sở dữ liệu.Con trỏ trong khi vòng lặp trả về mọi giá trị nhưng cuối cùng

Vì một lý do nào đó, nó không trả về giá trị kinh độ và vĩ độ cuối cùng (hoặc đầu tiên tùy thuộc vào nếu tôi sử dụng Cursor.MoveToLast) trong con trỏ.

Đây là mã của tôi:

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

Từ đó tôi nhận được:


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: THÔNG TIN/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/Hệ thống. (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: THÔNG TIN/Hệ thống. ra (10551): 1,0 04-02 15: 39: 07,493: INFO/System.out (10551): 1,0


7 Sets các giá trị, nơi tôi nên nhận được 8 bộ.

Cảm ơn.

Trả lời

22

bạn moveToNext() có hai tính năng. Nó trả về một boolean biểu thị rằng có tiếp theo, nhưng đồng thời nó tiếp tục và di chuyển con trỏ.

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

Hãy chắc chắn rằng bạn sử dụng thử bắt. – Pentium10

+5

Bạn có thể muốn một cái gì đó trong để đảm bảo có một yếu tố đầu tiên mặc dù, có lẽ sẽ không đi quá tốt nếu nó bao giờ kết thúc trong một sản phẩm nào. – AaronM

4

Bỏ qua giá trị đầu tiên thực sự, không phải giá trị cuối cùng.

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

Lần đầu tiên vào vòng lặp while bạn đang trỏ đến hàng thứ 2.

tôi sẽ chuyển đổi while loop to a do-while loop

+0

Tôi đã thử thời gian thực hiện, nhưng vì số lượng hàng được trả về có thể là bất kỳ số nào tôi không chắc chắn biểu thức trong khi nên là gì? – jcrowson

+0

do {...} trong khi (trackCursor.moveToNext()) Đó là cùng một biểu thức mà bạn hiện đang sử dụng. –

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

     } 

    } 
} finally { 
    if (c!=null) { 
     c.close(); 
    } 
} 
3

Bạn vừa thực hiện truy vấn. Bạn không thể loại bỏ 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); 
    } 
} 
Các vấn đề liên quan