无论我做什么,以下都会引发一个错误,即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中的一个游标中的列。
任何帮助都会很好,谢谢!
发布于 2012-05-13 06:28:16
您想要垂直加入游标(添加行)还是水平加入(添加列)?
这是理论,因为我还没看过代码,但这对我来说是有意义的.
MergeCursor垂直连接游标(事实上),一个接一个。因此,对于游标的一部分,您有一组列,而对于另一组,则有一组不同的列(假设)。
您的适配器正在试图为正在显示的行找到一个不存在于某一部分或另一部分的列。
如果您更改为连接这些列的CursorJoiner,我认为它会更像您所期望的那样工作,尽管您将如何适当地排列行--我不知道。
一个很好的解释here
编辑
我看到您使用相同的ID来获取每个游标,所以我对排列它们的关注是无关紧要的。我认为你确实想要CursorJoiner而不是MergeCursor。
https://stackoverflow.com/questions/10569652
复制相似问题