names.add(cursor.getString(i));
「i」はカーソル行のインデックスではなく、列のインデックスです。カーソルはすでに特定の行に配置されています。カーソルを再配置する必要がある場合。 cursor.moveまたはmoveToXXXXを使用します(ドキュメントを参照)。
getString / Int / Longなどの場合、必要な列をカーソルに指示するだけです。 columnIndexがわからない場合は、cursor.getColumnIndex("yourColumnName")
を使用できます。 。
ループは次のようになります:
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()]);
}