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);

これら2つの違いが原因でtryAdapter失敗するが、adapterインスタンスはそのままにしておくことを誰か教えてもらえますか?

4

1 に答える 1

0

出力を投稿していないのでわかりませんがLogcat、選択した列名を見ると_ID、プロジェクションに名前が付けられた列が含まれていないようです。Cursorに渡すものにCursorAdapterは、「_id」という名前の列を含める必要があります。そうしないと、クラスが機能しません。

于 2012-03-07T05:16:38.150 に答える