【问题标题】:Using MergeCursor and a SimpleCursorAdapter, What's Missing?使用 MergeCursor 和 SimpleCursorAdapter,缺少什么?
【发布时间】:2012-05-13 14:28:16
【问题描述】:

无论我做什么,以下都会抛出一个错误,即 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”不存在

当我调试应用程序时,我可以在 merge_cursor 的一个游标中看到“counterparty_name”列。

任何帮助都会很棒,谢谢!

【问题讨论】:

    标签: android listview simplecursoradapter mergecursor


    【解决方案1】:

    您是要垂直连接光标(添加行)还是水平连接(添加列)?

    这是理论,因为我没有看过代码,但对我来说很有意义......

    MergeCursor 一个接一个地垂直连接游标(事实)。因此,对于光标的一部分,您有一组列,而对于另一部分,您有一组不同的列(假设)。

    您的适配器正在尝试为正在显示的行查找一部分中不存在的列。

    如果您更改为连接列的 CursorJoiner,我认为它会更符合您的预期,尽管我不知道如何适当地排列行。

    很好的解释here

    编辑

    我看到您使用相同的 ID 来获取每个游标,所以我对排列它们的担心是无关紧要的。我认为您确实想要 CursorJoiner 而不是 MergeCursor。

    【讨论】:

      猜你喜欢
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 2018-06-02
      • 1970-01-01
      相关资源
      最近更新 更多