使用SimpleCursorAdapter得到了IllegalArgumentException

时间:2013-01-30 10:57:55

标签: android android-sqlite android-adapter

我有一个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。感谢。

2 个答案:

答案 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

我希望它可以帮到你!!

欢呼声。