IllegalArgumentException:调用SimpleCursorAdaptor时,列'_id'不存在

时间:2010-07-13 10:27:54

标签: android database

我有一个名为“master”的表,列idnamesurnamegenderdesignation

当我触发查询以获取CursorCursorAdapter对象时,我得到:

IllegalArgumentException: column '_id' does not exist when call to CursorAdaptor 

但我没有名为“_id”的columen。

有人能告诉我为什么会收到这个错误吗?

这是堆栈跟踪:

07-13 15:45:40.582: WARN/System.err(295): java.lang.IllegalArgumentException: column '_id' does not exist
07-13 15:45:40.592: WARN/System.err(295):     at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
07-13 15:45:40.592: WARN/System.err(295):     at android.widget.CursorAdapter.changeCursor(CursorAdapter.java:257)
07-13 15:45:40.602: WARN/System.err(295):     at com.praumtech.names4baby.ui.NamesListAdapter.setCursor(NamesListAdapter.java:63)
07-13 15:45:40.602: WARN/System.err(295):     at com.praumtech.names4baby.ui.BoysNamesListActivity.initNameList(BoysNamesListActivity.java:79)
07-13 15:45:40.602: WARN/System.err(295):     at com.praumtech.names4baby.ui.BoysNamesListActivity.onCreate(BoysNamesListActivity.java:49)
07-13 15:45:40.602: WARN/System.err(295):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
07-13 15:45:40.602: WARN/System.err(295):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
07-13 15:45:40.612: WARN/System.err(295):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
07-13 15:45:40.612: WARN/System.err(295):     at android.app.ActivityThread.access$2100(ActivityThread.java:116)
07-13 15:45:40.612: WARN/System.err(295):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
07-13 15:45:40.612: WARN/System.err(295):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-13 15:45:40.621: WARN/System.err(295):     at android.os.Looper.loop(Looper.java:123)
07-13 15:45:40.621: WARN/System.err(295):     at android.app.ActivityThread.main(ActivityThread.java:4203)
07-13 15:45:40.621: WARN/System.err(295):     at java.lang.reflect.Method.invokeNative(Native Method)
07-13 15:45:40.621: WARN/System.err(295):     at java.lang.reflect.Method.invoke(Method.java:521)
07-13 15:45:40.621: WARN/System.err(295):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
07-13 15:45:40.621: WARN/System.err(295):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
07-13 15:45:40.631: WARN/System.err(295):     at dalvik.system.NativeStart.main(Native Method)

4 个答案:

答案 0 :(得分:16)

这种情况正在发生,因为CursorAdapter在其正在使用的表格中必须有_id列。

使用Android应用程序中的数据库(SQLite),最好在所有表中添加名为_id的列,以便能够使用CursorAdapter

或者,您可以编写类似

的sql语句
select member_id as _id from member _table where ....." 

以获得可与Cursor一起使用的CursorAdapter

这在CursorAdaptor的{​​{3}}:

中指定
  

将数据从Cursor公开给ListView小部件的适配器。该   游标必须包含名为“_id”的列,否则此类将无效。“

答案 1 :(得分:1)

您的namemaster表需要定义一列_ID以供SimpleCursorAdaptor使用。确保您的表架构包含_ID而不是id,因为后者是错误的。

答案 2 :(得分:1)

简单和咸

要解决此问题,您必须将主键字段名称重命名为_id

答案 3 :(得分:0)

我相信SimpleCursorAdapter假设有一个列'_id'。你需要创建它,这样你可能更容易使用“_id”而不是你自己的“id”。 阅读page

上的第二篇文章