Android: преобразовать каждый столбец курсора в массив String - PullRequest
0 голосов
/ 20 января 2012

скажем, если это мой код

Cursor mCursor = dbAdapter.getAllTitles(); //returns results from 3 columns, eg column1, column2, column3

Есть ли в любом случае, я могу присвоить значения от столбца 1 до 1 строкового массива, столбца 2 для другого и так далее? возможно, вот так

String[] getColumn1 = mCursor.dataFrom("column1");
String[] getColumn2 = mCursor.dataFrom("column2");
String[] getColumn3 = mCursor.dataFrom("column3");

примеры, которые я вижу для достижения того же результата, что и выше, включают в себя итерацию значений и их размещение в соответствующем массиве. слишком много ресурсов, нет? тогда лучше сделать отдельный SQL-запрос для каждого столбца, нет?

Ответы [ 5 ]

4 голосов
/ 01 апреля 2014

Я нашел ответ от Dyonisos правильный, за исключением того, что я бы изменил эту строку в цикле for:

for(mCursor.moveToFirst(); mCursor.moveToNext(); mCursor.isAfterLast())

на этот:

for(cursor.moveToFirst(); !cursor.isAfterLast();cursor.moveToNext() )

Поскольку средний оператор - тот, который проверяет, продолжать ли цикл.Это может ответить на вопрос Лиама В. в комментариях к принятому ответу.

Отказ от ответственности: я знаю, что это должен был быть комментарий, но у меня недостаточно репутации, чтобы сделать это и этоинформация может быть полезна для других, кто ищет эту информацию в будущем =)

4 голосов
/ 20 января 2012
ArrayList<String> columnArray1 = new ArrayList<String>();
ArrayList<String> columnArray2 = new ArrayList<String>();
ArrayList<String> columnArray3 = new ArrayList<String>();
for(mCursor.moveToFirst(); mCursor.isAfterLast(); mCursor.moveToNext()) {
    columnArray1.add(mCursor.getString(COLUM_INDEX1));
    columnArray2.add(mCursor.getString(COLUM_INDEX2));
    columnArray3.add(mCursor.getString(COLUM_INDEX3));
}

После этого вы можете преобразовать ArrayList в массив String:

String[] colStrArr1 = (String[]) columnArray1.toArray(new String[columnArray1.size()]);
0 голосов
/ 12 ноября 2015

Как уже говорилось в нескольких других ответах, я согласен, что ответ dyonisos в основном правильный, но я думаю, что более простой (и более безопасный) способ реализации цикла - это цикл while, подобный следующему:

while (mcursor.moveToNext()){
            try {
                columnArray1.add(cursor.getString(1));
                columnArray2.add(cursor.getString(2));
                columnArray3.add(cursor.getString(3));
                 ...
            }catch(Exception e) {
                Log.d("error",e.toString());
            }
        } 

и затем можно преобразовать массивы, как в цитируемом ранее ответе .

String[] colStrArr1 = (String[]) columnArray1.toArray(new String[columnArray1.size()]);
0 голосов
/ 01 августа 2014

На самом деле, легко конвертировать курсор в массивы. Используйте этот метод:

private void initializeArrays(Cursor c) {
    collumn1 = new String[c.getCount()];
    collumn2 = new String[c.getCount()];
    for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        Array.set(collumn1, c.getPosition(), c.getString(c.getColumnIndex(""collum1")));
        Array.set(collumn2, c.getPosition(), c.getString(c.getColumnIndex("collumn2")));
    }
}
0 голосов
/ 07 июня 2014

Другой способ сделать это без использования ArrayList:

final int size = mCursor.getCount();
mArray1 = new String[size];
mArray2 = new String[size];
mArray3 = new String[size];

if (mCursor.moveToFirst) {
    int i = 0;
    do {
        mArray1[i] = mCursor.getString(COLUMN_INDEX_1);
        mArray2[i] = mCursor.getString(COLUMN_INDEX_2);
        mArray3[i] = mCursor.getString(COLUMN_INDEX_3);
        i++;
    } while (mCursor.moveToNext());
}

Это также будет работать для массивов примитивов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...