names.add(cursor.getString(i));
"i" không phải là chỉ số hàng của con trỏ, mà là chỉ số cột. Một con trỏ đã được định vị đến một hàng cụ thể. Nếu bạn cần định vị lại con trỏ của mình. Sử dụng cursor.move hoặc moveToXXXX (xem tài liệu).
Đối với getString / Int / Long, v.v. bạn chỉ cần cho con trỏ biết cột nào bạn muốn. Nếu bạn không biết columnIndex, bạn có thể sử dụng cursor.getColumnIndex("yourColumnName")
.
Vòng lặp của bạn sẽ giống như sau:
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()]);
}