2009-08-30 5 views

risposta

54

Passare attraverso tutti gli elementi nello Cursor e aggiungerli uno alla volta allo 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)); 
} 

(sostituire WhateverTypeYouWant con qualsiasi tipo si vuole fare un ArrayList di, e WHATEVER_COLUMN_INDEX_YOU_WANT con l'indice di colonna del valore che si desidera ottenere dal cursore.)

+0

Ciao, La cosa importante che voglio fare è visualizzare "Pugno personaggio" nella mia lista. Dopo aver ottenuto tutti i dati dal cursore, non so come convertirlo in un array String [] per ottenere "Primo carattere". Sembra qualcosa come questo char firstLetter = mString [firstVisibleItem] .charAt (0); – Dennie

+8

Amici: il ciclo for qui sopra non è completamente a destra (condizione e incremento anre scambiati). Usa 'for (mCursor.moveToFirst();! MCursor.isAfterLast(); mCursor.moveToNext()) {}' –

+2

Questo tipo di ciclo è un po 'orribile da leggere. La soluzione di @PearsonArtPhoto è molto più elegante e più facile da leggere. – WarrenFaith

39

Una correzione rapida: il ciclo for sopra salta il primo elemento del cursore. Per includere il primo elemento, utilizzare questo:

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

ottimo punto imbrizi. Questo è un modo molto migliore per scorrere gli elementi del Cursore – DonnaLea

+0

come aggiungere due o più valori di colonna ?? –

20

Anche meglio di @ di imbrizi risposta è questa:

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

moveToNext() restituirà false se non c'è nulla di sinistra, quindi questo riduce la SLOC da pochi, ed è più facile da vedere.

Ancora meglio è ottenere l'indice della colonna all'esterno del ciclo.

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

L'unico modo corretto per scorrere il cursore. Altre due risposte sono ... sbagliate: | – iTwenty

+1

Tranne che in scenari strani, di solito è possibile esternare getColumnIndex all'esterno del loop – rds

3

Questo ha funzionato molto bene per me perché volevo un ArrayList di oggetti:

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(); 

Basta fare un POJO MyObject e assicurarsi che ha un costruttore.