2009-08-30 33 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)); 
} 

(更換WhateverTypeYouWant與你想的ArrayList,並WHATEVER_COLUMN_INDEX_YOU_WANT你想要從遊標來獲取值的列索引任何類型。)

+0

嗨,我想要做的重要事情是在我的列表中顯示「拳頭字符」。從遊標獲取所有數據後,我不知道如何將其轉換爲String []數組以獲取「第一個字符」。它看起來像這樣char firstLetter = mString [firstVisibleItem] .charAt(0); – Dennie 2009-09-01 03:55:56

+8

朋友:上面的for循環並不完全正確(條件和增量anre交換)。使用'for(mCursor.moveToFirst();!mCursor.isAfterLast(); mCursor.moveToNext()){}' – 2012-02-03 09:23:44

+2

這種類型的循環有點難以閱讀。 @PearsonArtPhoto的解決方案更優雅,更易於閱讀。 – WarrenFaith 2014-01-24 16:07:26

39

一個快速修正:for循環以上跳過光標的第一個元素。 要包括第一元素,使用:

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

非常好點imbrizi。這是一個更好的方式來循環遍歷遊標的元素 – DonnaLea 2011-08-24 06:39:10

+0

如何添加兩個或更多列值? – 2013-10-10 05:14:44

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由少數幾個,更容易看到。

更好的辦法是讓列索引在循環之外。

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 2015-02-06 10:14:44

+1

除了在奇怪的場景中,通常可以將循環外部的getColumnIndex外部化 – rds 2015-03-09 17:45:25

3

這一個工作非常適合我,因爲我想對象的ArrayList:

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,並確保它有一個構造函數。

相關問題