4

私が何をしても、cursor_counterpartyに含まれる列の1つが存在しないというエラーが次のようにスローされます。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'は存在しません

アプリをデバッグすると、merge_cursorのカーソルの1つに「counterparty_name」という列が表示されます。

どんな助けでも素晴らしいでしょう、ありがとう!

4

1 に答える 1

4

カーソルを垂直方向(行を追加)または水平方向(列を追加)に結合しますか?

私はコードを覗いていないので、これは理論ですが、それは私には理にかなっています...

MergeCursorは、カーソルを垂直方向(ファクト)に次々に連結します。したがって、カーソルの一部には1つの列のセットがあり、もう1つの列には別の列のセットがあります(仮定)。

アダプターは、表示されている行のいずれかの部分に存在しない列を見つけようとしています。

列を連結するCursorJoinerに変更した場合、行を適切に並べる方法はわかりませんが、期待どおりに機能すると思います。

ここで良い説明

編集

同じIDを使用して各カーソルをフェッチしているので、カーソルを並べることについての私の懸念は関係ありません。MergeCursorではなくCursorJoinerが必要だと思います。

于 2012-05-13T06:28:16.323 に答える