非法参数异常:在调用SimpleCursorAdapter时,列“_id”不存在。

9
我有一张名为"master"的表,其中包含列idnamesurnamegenderdesignation
当我发出查询以获取Cursor对象用于CursorAdapter时,我会得到:
IllegalArgumentException: column '_id' does not exist when call to CursorAdaptor 

但是我没有一个名为"_id"的列。

有人可以告诉我为什么会出现这个错误吗?

以下是堆栈跟踪:

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个回答

16

这是因为CursorAdapter在使用的表中必须有一个名为_id的列。

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

或者,您可以编写类似以下的 SQL 语句:

select member_id as _id from member _table where ....." 

为了获得可用于CursorAdapterCursor,需要遵循 CursorAdapter文档中的说明:

一种适配器,将Cursor中的数据公开给ListView小部件。 Cursor必须包含名为“_id”的列,否则此类将无法工作。


1

简单而有咸味

为了克服这个问题,您必须将主键字段名称重命名为_id


1

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


0

我相信SimpleCursorAdapter假定有一个名为“_id”的列。你需要创建它,所以最好使用“_id”而不是你自己的“id”。

请阅读页面上的第二篇帖子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接