0

我正在尝试使用 SimpleCursorAdapter 来填充 ListView。但是,构造 SimpleCursorAdapter 让我的编译器抛出异常。最奇怪的是,在我的应用程序的早期,我使用了几乎完全相同的结构并取得了巨大的成功。这就是我遇到的问题:

cursor = db.rawQuery("SELECT "      + DatabaseHelper.KEY_AMOUNT
                            + ", "      + DatabaseHelper.KEY_DATE
                            + " FROM "  + DatabaseHelper.TABLE_HISTORY
                            + " WHERE " + DatabaseHelper.KEY_ID
                            + "=?",
                        new String[]{""+tenantId});
cursor.moveToFirst();

try {

    tryAdapter = new SimpleCursorAdapter(
            this, 
            R.layout.history_item, 
            cursor,
            new String[] {DatabaseHelper.KEY_AMOUNT, DatabaseHelper.KEY_DATE},
            new int[] {R.id.historyPaymentColumn, R.id.historyDateColumn});
    } catch (Exception e) {
        e.printStackTrace();
    }

这是我之前在应用程序中使用的 SimpleCursorAdapter 的实例(有效的那个):

cursor = db.rawQuery("SELECT _id, firstName, lastName, phone FROM phonebook", null);
adapter = new SimpleCursorAdapter(
            this,
            R.layout.phonebook_item,
            cursor,
            new String[]{"firstName", "lastName", "phone"}, 
            new int[] {R.id.firstName, R.id.lastName, R.id.phone});
setListAdapter(adapter);

谁能告诉我这两者之间究竟有什么区别导致tryAdapter失败但adapter保持实例不变?

4

1 回答 1

0

我不能确定,因为您还没有发布您的Logcat输出,但是查看您选择的列名,您似乎没有_ID在您的投影中包含一个名为的列。Cursor您传递给 a 的任何内容都CursorAdapter必须包含名为“_id”的列,否则该类将不起作用。

于 2012-03-07T05:16:38.150 回答