2012-03-07 109 views
0

我想使用SimpleCursorAdapter來填充ListView。但是,構造SimpleCursorAdapter讓我的編譯器引發了一個異常。最奇怪的是,在我的應用程序中,我幾乎使用了幾乎完全相同的結構來取得巨大成功。這就是我有問題:Android - 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實例不變?

+3

它爲什麼不起作用?什麼是例外?所以你最好在這裏發佈'Logcat'輸出。 – 2012-03-07 04:45:42

回答

0

我無法確定,因爲您還沒有發佈您的Logcat輸出結果,但查看您選擇的列名稱,似乎您沒有在投影中包含名爲_ID的列。您傳遞給CursorAdapter的任何Cursor都必須包含名爲「_id」的列,否則該類將不起作用。

+0

這樣做。謝謝! – 2012-03-07 21:14:38