我有一个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数据库打开opener,我可以在数据库中看到列_id
,因此它确实存在。
有人可以告诉我这个错误何时出现以及它试图告诉我什么?
E D I T:
njzk2指出我的权利,我没有被查询到我的光标中的“_id”列获取func。感谢。
答案 0 :(得分:0)
App Crashes On Startup Due To java.lang.IllegalArgumentException: column '_id' does not exist
请参阅以上具有相同问题的示例,这可能会对您有所帮助
答案 1 :(得分:0)
创建表时应添加“_id”字段。
//example
"CREATE TABLE TABLE_NAME (_id INTEGER PRIMARY KEY AUTOINCREMENT,field1 TEXT, field2 TEXT, etc TEXT)";
Cursor必须包含名为“_id”的列,否则此类将不起作用。 此外,如果合并的游标在其“_id”中具有重叠值,则使用此类的{@link android.database.MergeCursor}将不起作用 列。
SimpleCursorAdapter在API级别11中不推荐使用此构造函数。不建议使用此选项,因为它会导致在应用程序的UI线程上执行Cursor查询,从而导致响应能力较差甚至应用程序无响应错误。或者,使用带有CursorLoader的LoaderManager。
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
我希望它可以帮到你!!
欢呼声。