names.add(cursor.getString(i));
„i” nie jest indeksem wiersza kursora, jest indeksem kolumny. Kursor jest już ustawiony w określonym wierszu. Jeśli musisz zmienić położenie kursora. Użyj cursor.move lub moveToXXXX (patrz dokumentacja).
W przypadku getString/Int/Long itp. wystarczy wskazać kursorowi, którą kolumnę chcesz. Jeśli nie znasz indeksu kolumny, możesz użyć cursor.getColumnIndex("yourColumnName")
.
Twoja pętla powinna wyglądać tak:
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()]);
}