我有一个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列,这条语句也错了,因为我导出了数据库,用statement打开了,而且我可以看到数据库中的列_id,所以它确实存在。
谁能告诉我什么时候会出现这个错误,它想告诉我什么?
D I T:
njzk2指出了我的正确之处,我的光标中的"_id“列没有被查询。谢谢。
发布于 2013-01-30 11:00:20
请参阅上面的示例,它有类似的问题,可能会对您有所帮助。
发布于 2015-08-09 15:51:47
解决方案
在创建表时,应该添加"_id“字段。
//example
"CREATE TABLE TABLE_NAME (_id INTEGER PRIMARY KEY AUTOINCREMENT,field1 TEXT, field2 TEXT, etc TEXT)";游标必须包括一个名为"_id“的列,否则这个类将无法工作。此外,如果合并的游标在其“android.database.MergeCursor”列中有重叠值,则对此类使用{@link _id}将无法工作。
警告!!
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
希望它能帮到你!!
干杯。
https://stackoverflow.com/questions/14602337
复制相似问题