studio movetonext movetofirst islast getblob android arraylist android-sqlite android-cursor

movetofirst - movetonext sqlite android



¿Cómo puedo crear una lista Matriz con los datos del cursor en Android? (5)

¿Cómo puedo crear una lista Array (la lista muestra First Alphabet when scroll) con los datos del cursor?


En Kotlin puedes usar esta extensión:

fun <T> Cursor.toList(block: (Cursor) -> T) : List<T> { return mutableListOf<T>().also { list -> if (moveToFirst()) { do { list.add(block.invoke(this)) } while (moveToNext()) } } }

y úsala:

val listOfIds = cursor.toList { // create item from cursor. For example get id: it.getLong(it.getColumnIndex("_id")) }


Esta funcionó muy bien para mí porque quería una lista de objetos:

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

Simplemente MyObject un POJO MyObject y asegúrate de que tenga un constructor.


Incluso mejor que la respuesta de @imbrizi es esta:

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

moveToNext() devolverá falso si no queda nada, por lo que reduce el SLOC en unos pocos, y es más fácil de ver.

Aún mejor es obtener el índice de la columna fuera 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 }


Repase todos los elementos del Cursor y agréguelos uno a uno al 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)); }

(reemplace WhateverTypeYouWant con el tipo de que desee hacer una ArrayList of, y WHATEVER_COLUMN_INDEX_YOU_WANT con el índice de columna del valor que desea obtener del cursor.)


Una corrección rápida: el ciclo for anterior omite el primer elemento del cursor. Para incluir el primer elemento, usa esto:

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