SimpleCursorAdapter臭名昭着的'没有这样的列_id'

时间:2013-12-23 11:50:16

标签: android simplecursoradapter

所以是的,我已经在整个地方看到了有关这方面的问题,因此为我的查询添加了_id别名,如下所示:

        SimpleCursorAdapter sca = new SimpleCursorAdapter(getActivity(),
            R.layout.activity_contact_list, cursor, new String[] {
                    "rowid _id", DBOps.COL_CATNAME },
            new int[] { R.id.contact_list }, CursorAdapter.NO_SELECTION);

我正在创建我的光标:

    public Cursor getAllCategories() {
    return mDB.query(TABLE_NAME, new String[] { "rowid _id", COL_ID,
            COL_CATNAME,
            COL_ICONPATH }, null, null, null, null, null);
}
上面的

mDB是一个SQLite数据库。 我已经尝试将字符串更改为rowid as _id,这也不起作用。显然,没有必要通过添加另一个_id列来更改我的表结构,正如其他一些人已经注意到的那样,所以我在哪里错了?

更新 - 这是堆栈跟踪 -

Caused by: java.lang.IllegalArgumentException: column 'rowid _id' does not exist
at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:333)
at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:107)
at com.rex.bizcontacts.ContactListFragment.onCreate(ContactListFragment.java:77)

1 个答案:

答案 0 :(得分:3)

  

不,你没有遇到问题。

您抱怨的评论有正确的想法。 rowid _id不是有效名称。你可以通过查看异常来判断它。

欢迎您尝试使用"rowid AS _id"代替"rowid _id"。我建议使用rawQuery()而不是query(),这样可以更自然地编写("SELECT rowid AS _id, ...")。