Android 使用SimpleCursorAdapter获得了IllegalArgumentException
我有一个SQLite数据库,我想在listView中显示数据,我用一个Android 使用SimpleCursorAdapter获得了IllegalArgumentException,android,android-sqlite,android-adapter,Android,Android Sqlite,Android Adapter,我有一个SQLite数据库,我想在listView中显示数据,我用一个SimpleCursorAdapter尝试它: contactAdapter = new SimpleCursorAdapter(this, R.layout.contact_row, cursor, new String[] { MyDb.ACCOUNT_NAME },
SimpleCursorAdapter
尝试它:
contactAdapter = new SimpleCursorAdapter(this, R.layout.contact_row, cursor,
new String[] { MyDb.ACCOUNT_NAME },
new int[] { R.id.contactNameTv });
就在这条线上,我得到了一个
IllegalArgumentException:列“\u id”不存在
好吧,谢谢JVM,我不知道该怎么办,因为我甚至没有使用\u id
列,这个语句也是错误的,因为我导出了数据库并用sqlite database opener打开,我可以在数据库中看到\u id
列,所以它确实存在
有人能告诉我这个错误什么时候会出现,它想告诉我什么吗
电子数据交换:
njzk2将我指对了,我的游标get func中的“_id”列没有被查询到。谢谢。
请参阅上面的示例,它可能会帮助您解决类似问题
创建表时应添加“_id”字段
//example
"CREATE TABLE TABLE_NAME (_id INTEGER PRIMARY KEY AUTOINCREMENT,field1 TEXT, field2 TEXT, etc TEXT)";
游标必须包含名为“\u id”的列,否则此类将无法工作。
此外,如果合并的游标在其“\u id”中有重叠值,则将{@link android.database.MergeCursor}与此类一起使用将不起作用
列
警告
SimpleCrsorAdapter此构造函数在API级别11中被弃用。不鼓励使用此选项,因为它会导致在应用程序的UI线程上执行光标查询,从而导致响应性差,甚至应用程序没有响应错误。或者,将LoaderManager与游标Loader一起使用
另一种方法是使用CursorAdapter和CursorLoader
使用数据库时,CursorAdapter非常有用,例如,如果您希望直接从数据库在ListView、GridView或RecyclerView中显示数据列表
CursorLoader在后台运行异步查询
我希望它能帮助你
干杯。您不用它,但SimpleCorsorAdapter会用。必须使用cursoradapterOK,为什么它总是告诉我它不存在,而实际上它不存在?:)它在你的游标中吗?发布光标投影代码哦,我知道了,我现在理解的那个专栏没有被问到。谢谢