2010-06-22 69 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。