простой курсорадаптер не работает

Я использую базу данных, вынимаю из нее курсор, а затем использую simplecursoradapter для заполнения списка. Кажется, я не могу понять, почему приложение вылетает при создании нового simplecursoradapter. Мой курсор содержится в одноэлементном объекте. У меня есть ссылка на него через переменную данных в этом классе.

String[] columns = new String[] {"item", "quantity", "days"};
int[] to = new int[] { R.id.nametext, R.id.quantitytext, R.id.dayslefttext};
SimpleCursorAdapter sCA = new SimpleCursorAdapter(this, R.layout.itemrow, data.listCursor, columns, to);
listView1.setAdapter(sCA);

Что делает simplecursoradapter с информацией, переданной ему в его конструкторе? Неправильный формат одного из параметров? Вот простой XML-файл для каждой строки, который я использую, чтобы просто посмотреть, работает ли это:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content">
  <TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Loading Screen" 
    android:id="@+id/nametext"/>
  <TextView
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Loading Screen" 
    android:id="@+id/quantitytext"/>
  <TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Loading Screen" 
    android:id="@+id/dayslefttext"/>
</LinearLayout>

Вот как я загружаю курсоры:

listCursor = myDataBase.query(ITEMS_TABLE, null, "location" +" = ?", new String[]{IN_SPECIAL_LIST}, null, null, "item");

Я не могу понять, в чем проблема. Я прогнал это через некоторую отладку, и проблема возникает, когда я создаю новый simplecursoradapter.


person Flawed_Logicc    schedule 04.04.2011    source источник
comment
Вы смотрели на вывод Logcat? Какое исключение выброшено?   -  person ba__friend    schedule 04.04.2011


Ответы (1)


myDataBase.query(ITEMS_TABLE, null, ...

это null - ваша проблема, это означает, что запрос будет использовать SELECT *, но в вашей таблице нет столбца _id, поэтому вы должны использовать

new String[] {"YOURID AS _id", "item", "quantity", "days"}

SimpleCursorAdapter нужен столбец _id

YOURID может быть ROWID (ROWID как _id) или любым int или длинным идентификатором из вашей БД.

person Selvin    schedule 04.04.2011
comment
Хорошо, теперь все работает, спасибо! Но у меня возникают проблемы с помещением всех моих данных в строку списка. Я показываю только текст из первого текстового представления. - person Flawed_Logicc; 05.04.2011
comment
@Flawed_Logicc не могли бы вы опубликовать свой макет itemrow.xml? - person Selvin; 05.04.2011
comment
У меня все заработало, я случайно перекрывал текстовые представления. Спасибо! - person Flawed_Logicc; 06.04.2011