2011-08-21 26 views
18

gerekli olmadan moveToNext çalışır gibi görünüyor kullanıyorum girdileri aracılığıyla yineleme ediyorum:sqlite: moveToFirst standart SQLite imleci oluşturduktan sonra

while (cursor.moveToNext()) { 
} 

Tüm satırların doğru işleniyor. Okuduğum tüm belgeler, numarasını sağlamak için moveToFirst() bildirmeniz gerektiğini belirtir, imleç kümesinin ilk girişini işaretlediğinizden emin olun.

Bu, çalışmamasına rağmen ve başka bir sürümde aynı işleme sahip olmayabilir mi?

cevap

42

Hayır, bu doğru çalışıyor. Cursor s, satır dizini -1'de (ilk satırdan önce) başlar. Cursor birden fazla satıra başvuruyorsa, önerdiğiniz gibi while döngüsüyle döngü yapmak tercih edilen yöntemdir. moveToNext()'u arayacak ve sizi 0 dizinine (ilk satır) taşıyacak ve oradan başlayacaktır.

Cursor ürününüz yalnızca bir satıra başvuruyorsa, geçerli bir dizinde bulunduğunuzdan emin olmak için verileri okumadan önce üzerinde moveToFirst() numaralı telefonu arayabilirsiniz. moveToFirst() ve moveToNext() öğelerinin ikisi de Cursor ilk oluşturulduğunda ve dizin -1'de olduğunda aynı etkiye sahiptir.

+0

Teşekkürler! Bu onun neden sürekli çalıştığını açıklıyor. Gördüğüm örneklerin hiçbirinin bunun bir imleç ile yineleyebileceğiniz bir yol olduğunu belirtmesi garip. – charlest

+4

+1, Çok harika analiz. Bu ayrıca burada [belgelenmiştir] (http://developer.android.com/reference/android/database/Cursor.html#getPosition()). – orip

+0

"sizi 0 dizinine (ilk satır) götürür" Doğru şekilde dizin 1 atlayarak 0 dizinine geçer. – vitalii