names.add(cursor.getString(i));
"i" bukan indeks baris kursor, ini adalah indeks kolom. Kursor sudah diposisikan ke baris tertentu. Jika Anda perlu memposisikan ulang kursor Anda. Gunakan cursor.move atau moveToXXXX (lihat dokumentasi).
Untuk getString/Int/Long dll. Anda hanya perlu memberi tahu kursor kolom mana yang Anda inginkan. Jika Anda tidak mengetahui columnIndex, Anda dapat menggunakan cursor.getColumnIndex("yourColumnName")
.
Lingkaran Anda akan terlihat seperti ini:
public String[] getContacts(){
Cursor cursor = getReadableDatabase().rawQuery("SELECT name FROM contacts", null);
cursor.moveToFirst();
ArrayList<String> names = new ArrayList<String>();
while(!cursor.isAfterLast()) {
names.add(cursor.getString(cursor.getColumnIndex("name")));
cursor.moveToNext();
}
cursor.close();
return names.toArray(new String[names.size()]);
}