마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

커서를 이용한 string 배열 데이터 넣기 질문

0 추천

아래처럼 하면  데이터 1개만 입력되는데 뭐가 문제일까요 

https://www.masterqna.com/android/11639/mysql%EC%97%90%EC%84%9C-select%EB%A1%9C-%EB%B6%88%EB%9F%AC%EC%98%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0-arraylist-%EB%B0%8F-%EB%B0%B0%EC%97%B4%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94

여기 참고해서 했습니다!

int recordCount = cursor.getCount();
ArrayList<String> arrayList = new ArrayList<String>();
while (cursor.moveToNext()){
    arrayList.add(cursor.getInt(1));
}

String[] result = arrayList.toArray(new String[recordCount]);
enerigpy (2,110 포인트) 님이 2023년 3월 12일 질문

1개의 답변

0 추천
 
채택된 답변
일단 cursor에서 데이터를 읽는 방법은 아래처럼 첫번째 레코드를 고려해서 처리하시면 될 것 같구요.
이 문제가 아니면 브레이크 포인트를 걸어서 데이터가 db에서 어떻게 나오는지 확인해 보세요.

if (cursor.moveToFirst()){
   do{
      arrayList.add(cursor.getInt(1))
   }while(cursor.moveToNext());
}
cursor.close();
spark (226,420 포인트) 님이 2023년 3월 12일 답변
enerigpy님이 2023년 3월 12일 채택됨
알고리즘 상으로는 문제없어보이는데

for(int i=0; i<recordCount; i++){
            cursor.moveToNext();
            arrayList.add(cursor.getInt(1))
}

이런식으로 처음에는 구현했었던어여서 뭐가 문제일까요
cursor.moveToNext()의 문서를 보면

https://developer.android.com/reference/android/database/Cursor#moveToNext()

Move the cursor to the next row.

This method will return false if the cursor is already past the last entry in the result set.

커서가 마지막 레코드를 이미 지났으면 fasle를 리턴하기 때문에, 아래처럼 if 문으로 가져올 레코드가 있는지 먼저 체크를해야 겠죠.

if (cursor.moveToNext()) {
    arrayList.add(cursor.getInt(1))
}

그리고

while (cursor.moveToNext())
를 먼저 호출하게 되면 레코드가 한개만 존재하는 경우 cursor.moveToNext() = false를 리턴하기 때문에, 그 레코드는 읽어올 수가 없지 않나요?
...