Конвертировать курсор Android в ArrayList из массивов - PullRequest
3 голосов
/ 12 сентября 2011

Я пытаюсь преобразовать свои данные курсора в массив данных.Но в конце все данные в массиве переписываются с последней строкой.Что я делаю не так?

Cursor c = myDbHelper.getLvl1Cata();
        String[] data = new String[3];
        c.moveToFirst();
        while(!c.isAfterLast()) {
                data[0] = Integer.toString(c.getInt(0));
                data[1] = c.getString(1);
                data[2] = Integer.toString(c.getInt(2));
                Log.e("cc", data[1]);
                catalogueData.add(data);
                c.moveToNext();
        }   

Ответы [ 3 ]

11 голосов
/ 12 сентября 2011

Попробуйте это

Cursor c = myDbHelper.getLvl1Cata();
String[] data;
if (c != null) {
    while(c.moveToNext()) {
        data = new String[3]; // Note this addition
        data[0] = Integer.toString(c.getInt(0));
        data[1] = c.getString(1);
        data[2] = Integer.toString(c.getInt(2));
        Log.e("cc", data[1]);
        catalogueData.add(data);
    }
    c.close();
}

data - это массив строк. В исходном коде вы несколько раз добавляли один и тот же массив в структуру catalogueData. Вы каждый раз меняли значение содержимого массива, но это был все тот же объект массива. Таким образом, вы получили catalogueData с несколькими ссылками на один массив, и этот массив может иметь только одно значение для data[0]: последнее, что вы установили.

Этот ответ исправляет это, используя новый и другой массив для каждой строки в курсоре.

1 голос
/ 10 апреля 2014

Попробуйте это:

if(mycursor!=null){    
            do{
    TextView name = (TextView)view.findViewById(R.id.contact_name);               
    name.setText(cursor.getString(cursor.getColumnIndex
                (Displayname)));
    mycursor.moveToNext();
            }while (mycursor.isLast());
        }
0 голосов
/ 12 сентября 2011

Поместите String[] data = new String[3]; в цикл while. Вы перезаписываете объект массива с каждой итерацией.

...