0

我有一个数据库和我正在修改的 android 应用程序(开放数据工具包),它跟踪一组表示为表单的 .xml 文档的状态和其他相关信息。

为了便于 ListView 向用户显示有关这些表单的信息,我使用游标来保存从查询到数据库的信息,如下所示(是的,我知道不推荐使用 managedquery):

    String selection = InstanceColumns.RANDOM_ID + " = ? AND " 
    + InstanceColumns.STATUS + " = ? AND " + InstanceColumns.JR_FORM_ID + " = ?";

     String[] selectionArgs = {"2433", InstanceProviderAPI.STATUS_COMPLETE, "sample"};
     String sortOrder = InstanceColumns.STATUS + " DESC, " 
     + InstanceColumns.DISPLAY_NAME + " ASC";

     Cursor c = managedQuery(InstanceColumns.CONTENT_URI, null, selection, selectionArgs,
                    sortOrder);

在我当前的设置中,这将返回 1 行 10 列的游标。但是,我应该得到 11 列 - 我缺少对应的列InstanceColumns.RANDOM_ID

这一行是表中的新行——前 10 行在我开始编写代码之前就已经存在。

我知道这些列存在于我的数据库中。我在我的代码的其他地方写入它,并且我还手动检查了 .db 文件,该文件确实包含我插入的列和数据。

如有必要,我可以提供更多代码(我怀疑会这样),但是这个应用程序相当大并且是开源的。这可能是由我不知道的一些内部设置引起的。

这是我在崩溃时得到的:

E/CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 10 columns.

通常每当我尝试访问该列时,例如:

int randomID = c.getInt(c.getColumnIndex(InstanceColumns.RANDOM_ID));

这是来自全新安装,以确保在模拟器和我的设备上都出现新的数据库文件。

如何使光标包含表的所有行?

4

1 回答 1

0

回到这个只是为了结束,在代码的其他地方定义了一个投影哈希图,我在大量挖掘后发现它对查询表施加了限制。向 hashmap 添加一行并更新它允许查询通过。

于 2017-04-07T19:28:53.497 回答