2009-08-30 3 views

답변

54

Cursor의 모든 요소를 ​​찾아 ArrayList에 하나씩 추가하십시오.

ArrayList<WhateverTypeYouWant> mArrayList = new ArrayList<WhateverTypeYouWant>(); 
for(mCursor.moveToFirst(); !mCursor.isAfterLast(); mCursor.moveToNext()) { 
    // The Cursor is now set to the right position 
    mArrayList.add(mCursor.getWhateverTypeYouWant(WHATEVER_COLUMN_INDEX_YOU_WANT)); 
} 

(당신이 커서에서 얻을하려는 값의 열 인덱스와의 ArrayListWHATEVER_COLUMN_INDEX_YOU_WANT를 만들기 위해 원하는 유형 WhateverTypeYouWant를 교체합니다.)

+0

안녕하세요, 중요한 일은 내 목록에 "주먹 주인공"을 표시하는 것입니다. 커서에서 모든 데이터를 가져온 후이를 String [] Array로 변환하여 "첫 번째 문자"를 얻는 방법을 모르겠습니다. 다음과 같은 문자가 있습니다. firstLetter = mString [firstVisibleItem] .charAt (0); – Dennie

+8

친구 : 위의 for 루프가 정상적으로 완료되지 않았습니다 (조건 및 증가 된 값이 스왑 됨). 'for (mCursor.moveToFirst();! mCursor.isAfterLast(); mCursor.moveToNext()) {}' –

+2

이 루프 유형은 읽기에 지독합니다. @PearsonArtPhoto의 솔루션은 더 우아하고 읽기 쉽습니다. – WarrenFaith

39

한 빠른 보정 : 루프에 대한 위에서 커서는 커서의 첫 번째 요소를 건너 뜁니다. 가 첫 번째 요소를 포함하려면 다음을 사용 :

ArrayList<String> mArrayList = new ArrayList<String>(); 
mCursor.moveToFirst(); 
while(!mCursor.isAfterLast()) { 
    mArrayList.add(mCursor.getString(mCursor.getColumnIndex(dbAdapter.KEY_NAME))); //add the item 
    mCursor.moveToNext(); 
} 
+3

아주 좋은 지점. 이것은 커서의 요소를 반복하는 훨씬 더 좋은 방법입니다. – DonnaLea

+0

두 개 이상의 열 값을 추가하는 방법 ?? –

20

@ imbrizi의 대답보다는 더 나은이있다 :

ArrayList<String> mArrayList = new ArrayList<String>(); 
while(mCursor.moveToNext()) { 
    mArrayList.add(mCursor.getString(mCursor.getColumnIndex(dbAdapter.KEY_NAME))); //add the item 
} 

moveToNext() 아무것도 남아가없는 경우 false를 반환, 그래서 이것은 SLOC 감소합니다 몇 가지만 보아서보기 쉽습니다.

루프 외부에서 열 인덱스를 얻는 것이 훨씬 좋습니다.

List<MyObject> myList = new ArrayList<String>(); 
Cursor c = ... 

while(c.moveToNext()) { 
    myList.add(new MyObject(cursor.getInt(cursor.getColumnIndex("_id")), cursor.getString(cursor.getColumnIndex("column1")), cursor.getInt(cursor.getColumnIndex("column2")));   
} 
c.close(); 

는 그냥 POJO MyObject을하고 생성자를 가지고 있는지 확인하십시오 : 나는 개체의 ArrayList를를 원하기 때문에

ArrayList<String> mArrayList = new ArrayList<String>(); 
int columnIndex=mCursor.getColumnIndex(dbAdapter.KEY_NAME) 
while(mCursor.moveToNext()) { 
    mArrayList.add(mCursor.getString(columnIndex)); //add the item 
} 
+2

커서를 반복하는 올바른 방법. 다른 두 가지 대답은 단지 .... 잘못된 것입니다 : | – iTwenty

+1

이상한 시나리오를 제외하고 일반적으로 루프 외부에서 getColumnIndex를 외부화 할 수 있습니다 – rds

3

이 사람은 나를 위해 정말 잘했다.

관련 문제