Android - SimpleCursorAdapter引发异常

时间:2012-03-07 04:43:54

标签: android android-adapter

我正在尝试使用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实例没有受到影响?

1 个答案:

答案 0 :(得分:0)

我无法确定,因为您尚未发布Logcat输出,但查看所选内容中的列名,似乎您未在投影中添加名为_ID的列。传递给Cursor的任何CursorAdapter都必须包含名为“_id”的列,否则该类将无效。