names.add(cursor.getString(i));
"i" is niet de cursorrij-index, het is de kolomindex. Er staat al een cursor op een specifieke rij. Als u uw cursor moet verplaatsen. Gebruik cursor.move of moveToXXXX (zie documentatie).
Voor getString/Int/Long etc. hoef je alleen maar de cursor te vertellen welke kolom je wilt. Als u de columnIndex niet kent, kunt u cursor.getColumnIndex("yourColumnName")
gebruiken .
Je lus zou er als volgt uit moeten zien:
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()]);
}