Подтвердить что ты не робот

Как создать массив массивов с данными курсора в Android

Как создать массив массивов (отображение списка First Alphabet при прокрутке) с данными курсора?

4b9b3361

Ответ 1

Пройдите через каждый элемент в 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 с индексом столбца значения, которое вы хотите получить от курсора.)

Ответ 2

Одна быстрая коррекция: цикл 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 ответ:

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
}

Ответ 4

Это работало очень хорошо для меня, потому что я хотел, чтобы аррайалист объектов:

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 и убедитесь, что у него есть конструктор.