Wie kann ich eine Liste Array mit den Cursor-Daten in Android erstellen
-
20-09-2019 - |
Frage
Wie kann ich eine Liste Array (die Listenanzeige Alphabet, wenn Scroll) mit den Cursor Daten an?
Lösung
Gehen Sie durch jedes Element in der Cursor
, und fügen Sie sie eins nach dem anderen auf die 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));
}
(ersetzen WhateverTypeYouWant
mit welcher Art auch immer Sie wollen eine ArrayList
von und WHATEVER_COLUMN_INDEX_YOU_WANT
mit dem Spaltenindex des Wertes Sie vom Cursor bekommen machen.)
Andere Tipps
Eine schnelle Korrektur: die for-Schleife oben überspringt das erste Element des Cursors. Um auch das erste Element, verwenden Sie diese:
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();
}
Noch besser als @ imbrizi Antwort der ist dies:
ArrayList<String> mArrayList = new ArrayList<String>();
while(mCursor.moveToNext()) {
mArrayList.add(mCursor.getString(mCursor.getColumnIndex(dbAdapter.KEY_NAME))); //add the item
}
moveToNext()
wird falsch zurück, wenn es nichts ist links, so dass dies die SLOC von wenige reduziert, und ist leichter zu sehen.
Noch besser ist es, den Spaltenindex außerhalb der Schleife zu erhalten.
ArrayList<String> mArrayList = new ArrayList<String>();
int columnIndex=mCursor.getColumnIndex(dbAdapter.KEY_NAME)
while(mCursor.moveToNext()) {
mArrayList.add(mCursor.getString(columnIndex)); //add the item
}
Dies funktionierte wirklich gut für mich, weil ich eine Arraylist von Objekten gesucht:
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();
Nur eine POJO MyObject
machen und stellen Sie sicher, es hat einen Konstruktor.
In Kotlin Sie diese Erweiterung verwenden können:
fun <T> Cursor.toList(block: (Cursor) -> T) : List<T> {
return mutableListOf<T>().also { list ->
if (moveToFirst()) {
do {
list.add(block.invoke(this))
} while (moveToNext())
}
}
}
und verwenden es:
val listOfIds = cursor.toList {
// create item from cursor. For example get id:
it.getLong(it.getColumnIndex("_id"))
}