首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SimpleCursorAdapter got

使用SimpleCursorAdapter got
EN

Stack Overflow用户
提问于 2013-01-30 10:57:55
回答 2查看 182关注 0票数 0

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

代码语言:javascript
复制
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“列没有被查询。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-01-30 11:00:20

id' does not exist

请参阅上面的示例,它有类似的问题,可能会对您有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2015-08-09 15:51:47

解决方案

在创建表时,应该添加"_id“字段。

代码语言:javascript
复制
 //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

希望它能帮到你!!

干杯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14602337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档