我有一个数据库和我正在修改的 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));
这是来自全新安装,以确保在模拟器和我的设备上都出现新的数据库文件。
如何使光标包含表的所有行?