Min*_*rip 8 sqlite android android-sqlite android-cursoradapter
我收到了这个错误
IllegalArgumentException:列'_id'不存在
当使用a SimpleCursorAdapter
从我的数据库中检索时,表确实有这个_id
列.注意到这是一个常见问题,我尝试在线解决一些解决方案,但没有一个能够解决.这是我的游标查询:
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.quoterow, myCursor, new String[]{"_id", "quote"}, new int[]{R.id.quote});
Run Code Online (Sandbox Code Playgroud)
虽然我应该提到原来没有包含该_id
列,但我最近添加了这个以尝试解决问题.有没有人有任何可能有助于解决问题的想法?
Squ*_*onk 15
您的数据库不必具有名为"_id"的列,但SimpleCursorAdaptor确实需要返回一个.您可以使用别名执行此操作.
一个例子是我有一个带有列的表...
uid,name,number
Run Code Online (Sandbox Code Playgroud)
要查询SimpleCursorAdapter,我用数据库来做rawQuery
...
SELECT uid as _id,name,number FROM MY_TABLE
Run Code Online (Sandbox Code Playgroud)
这很好,并为SimpleCursorAdapter提供必要的'_id'列.
编辑:据我所知,_id字段用作唯一键,以确保适配器和适配器视图等可以正确处理光标处理的数据.
查看内容提供商文档中的数据模型.
使用任何类型的"数据库"中的唯一键是非常普遍的做法,据我所知,使用列名'_id'(或'_ID')只是一种标准化和简化事物的方法.数据库,内容提供商,游标,适配器等
简而言之,为了使这些不同的组件正常工作,它们需要一个具有唯一值的数据列,但它们还必须"知道"该列的名称.他们不会"知道",可以说,我的专栏名称'uid'是他们需要的名字而不是我的'名字'和'数字'专栏.