0

我有一个 SQLite 数据库,我想在 listView 中显示数据,我尝试使用SimpleCursorAdapter

contactAdapter = new SimpleCursorAdapter(this, R.layout.contact_row, cursor, 
                                         new String[] { MyDb.ACCOUNT_NAME },
                                         new int[] { R.id.contactNameTv });

在这条线上,我得到了一个

IllegalArgumentException:列“_id”不存在。

好吧,谢谢 JVM,我只是不知道该怎么办,因为我什至不使用_id列,而且这个语句也是错误的,因为我导出了数据库并用 sqlite 数据库打开器打开,我可以看到_id列数据库,所以它确实存在。

有人可以告诉我这个错误应该什么时候出现,它想告诉我什么?

编辑:

njzk2 指出我是对的,我的光标中的“_id”列没有被查询到 func。谢谢。

4

2 回答 2

0

由于 java.lang.IllegalArgumentException,应用程序在启动时崩溃:列“_id”不存在

请参阅上面具有相同问题的示例可能会对您有所帮助

于 2013-01-30T11:00:20.627 回答
0

解决方案

您应该在创建表时添加“_id”字段。

 //example 

   "CREATE TABLE TABLE_NAME (_id INTEGER PRIMARY KEY AUTOINCREMENT,field1 TEXT, field2 TEXT, etc TEXT)";
    

游标必须包含名为“_id”的列,否则此类将不起作用。此外,如果合并的游标在其“_id”列中具有重叠值,则将 {@link android.database.MergeCursor} 与此类一起使用将不起作用。

警告!!

SimpleCursorAdapter 此构造函数在 API 级别 11 中已弃用。不鼓励使用此选项,因为它会导致在应用程序的 UI 线程上执行游标查询,从而可能导致响应速度不佳甚至应用程序无响应错误。作为替代方案,将 LoaderManager 与 CursorLoader 一起使用。

http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html

另一种方法是使用 CursorAdapter 和 CursorLoader。

当您使用数据库时,CursorAdapter 非常有用,例如,如果您想直接从数据库中显示 ListView、GridView 或 RecyclerView 中的数据列表。

CursorLoader 在后台运行异步查询!

http://developer.android.com/reference/android/content/CursorLoader.html

希望对你有帮助!!

干杯。

于 2015-08-09T15:51:47.713 回答