Используя MergeCursor и SimpleCursorAdapter, чего не хватает?

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

cursor_invoices = Invoices.getInvoicesCursor(counterparty.getId());
    Cursor cursor_counterparty = Counterparties
            .getCounterpartyCursor(counterparty.getId());
    startManagingCursor(cursor_invoices);
    startManagingCursor(cursor_counterparty);

    /* Joins cursors akin to doing an SQL join */

    MergeCursor merge_cursor = new MergeCursor(new Cursor[] {
            cursor_invoices, cursor_counterparty });
    merge_cursor.moveToFirst();

    int[] listview_columns = new int[] { R.id.textview_invoice_number,
            R.id.textview_counterparty_name, R.id.textview_amount,
            R.id.textview_account_name, R.id.textview_invoice_date,
            R.id.textview_date_paid };
    String[] listview_fields = new String[] { App.INVOICENUMBER,
            App.COUNTERPARTYNAME, counterparty_amount_field,
            App.ACCOUNTNAME, App.INVOICEDATE, App.DATEPAID };

    SimpleCursorAdapter cursor_adapter_invoices = new SimpleCursorAdapter(
            this, R.layout.listview_invoice_item, merge_cursor,
            listview_fields, listview_columns);

Я получаю ошибку:

java.lang.IllegalArgumentException: столбец 'counterparty_name' не существует

Когда я отлаживаю приложение, я вижу "counterparty_name" в виде столбца на одном из курсоров в merge_cursor.

Любая помощь будет отличной, спасибо!

1 ответ

Вы хотите соединить курсоры вертикально (добавление строк) или горизонтально (добавление столбцов)?

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

MergeCursor объединяет курсоры вертикально (факт), один за другим. Таким образом, для части курсора у вас есть один набор столбцов, а для другого у вас есть другой набор столбцов (предположим).

Ваш адаптер пытается найти столбец, который не существует ни в одной части, ни в другой для отображаемой строки.

Если бы вы изменили на CursorJoiner, который объединяет столбцы, я думаю, что это будет работать больше, чем вы ожидаете, хотя как вы правильно выстроите строки, я не знаю.

Хорошее объяснение здесь

РЕДАКТИРОВАТЬ

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

Другие вопросы по тегам