2010-06-22 45 views
1

我試圖創建一個列表適配器,它可以引入並顯示數據庫中的數據。從我所知道的情況來看,它正在拉動信息,但是當我嘗試從新的Simple遊標適配器創建ListAdapter時失敗。不知道我在這裏做錯了什麼。將SQLite數據放入ListActivity

SQLiteDatabase db = myDbHelper.getReadableDatabase(); 
String select = "Select StateID, State, Details from States";    
Cursor cursor = db.rawQuery(select, null); 

startManagingCursor(cursor); 
ListAdapter adapter = new SimpleCursorAdapter(this, 
    android.R.layout.simple_list_item_1, 
    cursor, 
    new String[]{"State"}, 
    new int[]{android.R.id.text1}); 

setListAdapter(adapter); 

第二部分將被找出如何分配STATEID在列表中的行ID,這樣當有人點擊的狀態,但是,這樣是不可見的,我可以訪問它。

回答

4

如果您在Eclipse中使用adb logcat,DDMS或DDMS透視圖來查看與崩潰相關的堆棧跟蹤,確實有幫助。否則,當你說它「失敗」時,我們不知道它的意思。

但是,從代碼檢查中可以看到一個主要缺陷:您需要一個名爲_ID的列才能使用SimpleCursorAdapter_ID需要唯一,Java long(SQLite中的INTEGER)。

理想情況下,您可以用_ID替換​​。在這種情況下,您的「第二部分」已解決,因爲該行的ID是您的_ID值。例如,當您在列表項上點擊一個long id參數時,即_ID的值。

+0

我還沒有在Eclipse中進行大量的調試,但仍處於學習階段。 在logcat的我發現 06-22 21:02:22.519:ERROR/AndroidRuntime(229):未捕獲的處理程序:線程退出主要由於未捕獲的異常 06-22 21:02:22.750:ERROR/AndroidRuntime(229 ):java.lang.RuntimeException:無法啓動活動ComponentInfo {com.jl.og/com.jl.og.Informational}:java.lang.IllegalArgumentException:列'_id'不存在 – AndyD273 2010-06-22 21:18:24

+0

因此,我將StateID重命名爲_id,似乎這樣做。 這真的令人沮喪。它不是_ID,它必須是_id。 我也有8個表,我將它們連接在一起,並且在所有表上使用_id作爲主鍵是有點煩人的,因爲它們現在不匹配外鍵,這使得事情變得愚蠢。 另外我在幾個應用程序中使用這個數據庫,這意味着我必須重寫它們以使用新的結構,或者我必須在每次更新時重命名ID列......有什麼辦法可以解決這個問題? – AndyD273 2010-06-22 21:18:55

+0

是否可以將'Select StateID as _id'? – AndyD273 2010-06-22 21:20:18

0

對我來說,一切都很好。

如果您需要獲取行ID,則必須在查詢結果中有一個_ID列,這將被識別爲行ID。