У меня возникли проблемы с использованием rawQuery для получения курсора для использования в ExpandableListView.У меня есть класс адаптера с именем ExpandableDataAdapter, который расширяет SimpleCursorTreeAdapter.Вот строка, которую я должен создать экземпляр ExpandableDataAdapter:
ExpandableDataAdapter confDataAdapter = new ExpandableDataAdapter(
this,
groupCursor,
R.layout.detaillist_group,
new String[]{ "TrackName" },
new int[]{ R.id.rowText },
R.layout.detaillist_child,
new String[]{ "Title", "Speakers", "TrackName", "Room" },
new int[]{ R.id.sessionTitle, R.id.sessionSpeakers, R.id.sessionTrack, R.id.sessionRoom }
);
Внутри определения класса ExpandableDataAdapter у меня есть следующий метод, чтобы получить дочерний курсор для группового курсора:
protected Cursor getChildrenCursor(Cursor groupCursor)
{
// Given a group, return a cursor for all the children in that group.
Cursor talksCursor = _db.rawQuery("SELECT t1.TalkID as _id, t1.Title," +
" 'None' as Speakers, t2.TrackName, t1.Room" +
" from talks t1, tracks t2" +
" where t1.TrackID = t2.TrackID" +
" and t2.TrackID=?", new String[]{ groupCursor.getString(groupCursor.getColumnIndex("_id")) });
startManagingCursor(talksCursor);
return talksCursor;
}
Приведенный выше запрос работает, и ExpandableListView обнаруживается.Но, конечно, вышеизложенное является более простой версией фактического запроса, который я хочу выполнить.Когда я заменяю его фактическим (и несколько более сложным) запросом, я получаю исключение.Во-первых, запрос:
protected Cursor getChildrenCursor(Cursor groupCursor)
{
// Given a group, return a cursor for all the children in that group.
Cursor talksCursor = _db.rawQuery("SELECT t1.TalkID as _id, t1.Title," +
" group_concat(t3.Speaker, ', ') as Speakers, t2.TrackName, t1.Room" +
" from talks t1, tracks t2, talkspeaker t3" +
" where t1.TalkID = t3.TalkID" +
" and t1.TrackID = t2.TrackID" +
" and t2.TrackID=?" +
" group by _id, t1.Title, t2.TrackName, t1.Room",
new String[]{ groupCursor.getString(groupCursor.getColumnIndex("_id")) });
startManagingCursor(talksCursor);
return talksCursor;
}
Исключение, которое я получаю: столбец "Комната" не существует.Этот последний запрос отлично работает из приглашения к базе данных, поэтому я предполагаю, что что-то происходит, когда выполняется механизмом Android.Кроме того, заявление об исключении также поставило меня в тупик.Я использую слишком много таблиц?Функция group_concat создает проблемы?Любые указатели?
Еще примечания: исключение выдается из конструктора адаптера, который определяется следующим образом.Я вызываю конструктор, как показано в первом фрагменте этого поста.
public ExpandableDataAdapter(Context context, Cursor cursor,
int groupLayout, String[] groupFrom, int[] groupTo,
int childLayout, String[] childFrom, int[] childTo)
{
super(context, cursor, groupLayout, groupFrom, groupTo,
childLayout, childFrom, childTo);
}