【问题标题】:SimpleCursorAdapter to[] and from[] mapping with a content providerSimpleCursorAdapter to[] 和 from[] 与内容提供者的映射
【发布时间】:2014-05-03 10:09:23
【问题描述】:

我有一个 ListView 和 5 个 TextViews,所以我使用 SimpleCursorAdapter 来填充它。数据来自内容提供商。 我的问题是_id 列。我知道我必须包含它以使适配器正常工作。我的问题是,我有 5 个文本视图,我将为 six 列设置 projection 数组。

to[] 和 from[] 的数组

static {

    from = new String[] {
        EmployeeProviderContract.ROW_ID,
        EmployeeProviderContract.F_NAME,
        EmployeeProviderContract.L_NAME,
        EmployeeProviderContract.ROW_EMP_ID,
        EmployeeProviderContract.AGE,
        EmployeeProviderContract.SEX
    };


    to = new int[] {

            R.id.employee_first_name,
            R.id.employee_last_name,
            R.id.e_employee_id,
            R.id.e_age,
            R.id.e_sex
    };
}

如您所见,to[] 中有 5 个项目,from[] 中有 6 个项目(因为 _id)。

简单的光标适配器

    mAdapter = new SimpleCursorAdapter(getApplicationContext(), 
    R.layout.single_row_layout, // The row template
    null, // Cursor but we dont have one right now, so NULL. Will come from swapCursor()
    from,// Columns to show from 
    to, // The layout ids i.e individual text views to show the data in
                0); // Default 0 as FLAG

因此,当光标返回时,它会在R.id.employee_first_name 中设置_id 的值,以此类推其余的值。我不想在文本视图中显示_id。我不能删除 _id 否则它会引发异常。 我该如何解决这个问题? 非常愚蠢的问题,但我似乎找不到合适的方法。

这就是内容提供者查询的样子

Cursor returnCursor = db.query(EmployeeProviderContract.EMP_PERSONAL_TABLE_NAME,
                projection, selection , selectionArgs, null, null, sortOrder);

注意:我扩展的是 Activity 而不是 ListActivity

【问题讨论】:

  • 我不能删除 _id 否则会引发异常。 什么样的异常?
  • java.lang.IllegalArgumentException: 列 '_id' 不存在
  • 我明白了。在create table 查询中,您是否有_id 列?

标签: android simplecursoradapter


【解决方案1】:

可能从 ContentProvider 返回的光标不包含“_id”列。检查您的数据库表是否有 _id 列。最佳实践是在您的 Contract 类的内部类(表类)中实现 BaseColumns 接口,您的 SQLiteOpenHelper 实现使用该接口来创建数据库..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多