2010-04-02 13 views
6

İmleci bir imleçte yinelemek ve veritabanındaki her noktanın enlem ve boylam değerlerini çıktılamak için while döngüsü kullanıyorum.Döngü her değer döndürürken, ancak son

Herhangi bir nedenle, imleçte enlem ve enlem değerleri için sonuncu (veya ilk önce Cursor.MoveToLast kullandığımda bağlı olarak) döndürmez. Bundan

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

alıyorum: Burada

benim kodudur


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: BİLGİ/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: BİLGİ/Sistem. çıkış (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: BİLGİ/Sistem. dışarı (10551): 1,0 04-02 15: 39: 07,493: INFO/System.out (10551): Ben 8 setleri almak gerekir değerlerden 1,0


7 ayarlar.

Teşekkürler.

cevap

22

moveToNext dönüştürmek iki özelliğe sahiptir olacaktır. Bir sonraki 'un olduğunu gösteren bir boolean döndürür, ama aynı zamanda ileri gider ve imleci hareket ettirir.

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

Deneme tutmayı kullandığınızdan emin olun. – Pentium10

+5

Muhtemelen ilk elemanın var olduğundan emin olmak için bir şeyler isteyebilirsiniz, muhtemelen boş bir yerde biterse çok iyi gitmeyecektir. – AaronM

4

İlk değeri atlamanız aslında son değil.

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

while döngüsüne ilk kez 2. sırada işaret ediyorsunuz.

I) 'nu (while loop to a do-while loop

+0

Yapmayı denedim, ancak döndürülen satır sayısı herhangi bir sayı olabileceğinden, ifade ifadesinin ne olması gerektiğinden emin değildim? – jcrowson

+0

do {...} while (trackCursor.moveToNext()) Şu anda kullandığınız ifade aynıyken. –

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

     } 

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

Yalnızca sorguyu uyguladınız. MoveToFirst() 'den kurtulmak mümkün değil mi?

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); 
    } 
} 
İlgili konular