Отображение результатов SQL-соединения в ListActivity - PullRequest
1 голос
/ 14 августа 2010

Мне нужно отобразить результаты объединения SQL в ListView / ListActivity.

Я создал курсор:

Cursor cursor = db.rawQuery(LIST_JOIN_SQL, null);

и, если я переберу курсор, курсор, результатыэто именно то, что я ожидаю.Однако, когда я пытаюсь использовать SimpleCursorAdapter для отображения этих результатов в ListView, я получаю исключение времени выполнения, потому что нет столбца с именем 'id'.

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
R.layout.item, cursor, FROM, TO);

Где FROM и TO определены как:

private static String[] FROM = { "name", };
private static int[] TO = { R.id.name, };

Теперь я полагаю, что, возможно, здесь используется неправильный подход, так как кажется, что SimpleCursorAdapters не предназначены для отображения результатов объединений.

Какой подход вы бы порекомендовали здесь?Я ограничен использованием API Android 1.6.

Ответы [ 2 ]

2 голосов
/ 14 августа 2010

Попробуйте выбрать один из столбцов как _ID псевдоним

select col1 as _id from table
1 голос
/ 14 августа 2010

Чтобы использовать CursorAdapter (или любой из его подклассов), вам необходимо иметь столбец "_id"; это явно указано в документации .Это потому, что CursorAdapter интенсивно использует этот столбец.

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

  1. СоздатьПоле _id в одной из таблиц, так что при присоединении вы получите поле _id.

  2. Реализуйте свой собственный ListAdapter (начиная с BaseAdapter ), которыйпо сути, CursorAdapter, но не требует поля _id.

Я подозреваю, что # 1 было бы легче сделать, если вы управляете базой данных, но вам придется делать # 2, еслиВы не можете изменить схему баз данных.

...