Android Cursor奇怪的行为

时间:2010-05-06 09:38:14

标签: android sqlite cursor

在一个大应用程序中搜索了许多bug之后,我终于找到了这个bug。此日志记录捕获问题:

Log.d(TAG,"buildList, DBresult.getInt(1): "+DBresult.getInt(1));
Log.d(TAG,"buildList, DBresult.getString(1): "+DBresult.getString(1));
Log.d(TAG,"buildList, DBresult.getInt(4): "+DBresult.getInt(4));
Log.d(TAG,"buildList, DBresult.getString(4): "+DBresult.getString(4));

结果输出:

05-06 11:11:20.123: DEBUG/TodoList(18943): buildList, DBresult.getInt(1): 0
05-06 11:11:20.123: DEBUG/TodoList(18943): buildList, DBresult.getString(1): false
05-06 11:11:20.123: DEBUG/TodoList(18943): buildList, DBresult.getInt(4): 0
05-06 11:11:20.123: DEBUG/TodoList(18943): buildList, DBresult.getString(4): true

没有运行的背景线程。正如您所看到的,问题是“0”在某种情况下被解释为false,而在另一种情况下被解释为true。由于我完全迷失了这种情况,我不知道如何继续。什么可能导致这种行为?这两列都是“boolean”类型,即sqlite中的数字。不幸的是,返回的字符串是正确的值,而整数总是0.如果我将数据库导出到我的计算机并使用SQlite Administrator检查它我可以看到值已正确设置,它只是getInt() - 函数总是返回0.我知道这个事实在我编码的其他应用程序中有效,我不知道为什么它已停止工作。

我已经尝试在2.0,2.0.1和2.1下编译代码,它总是出现。我可以通过获取这样的布尔值使我的应用程序再次运行:

myBool= (DBresult.getString(0).equals("true"));

但这既丑陋也没有优化。任何有关导致此行为的建议都是受欢迎的。

干杯,

1 个答案:

答案 0 :(得分:1)

我相信我解决了它: 更新数据库接口后,插入前的所有数据都通过String.valueOf() - 函数转换为字符串。因此,不是“1”,而是将“true”输入数据库。我的数据库管理工具没有显示差异。为什么用getInt()函数将其转换为'0' - 我不知道的函数,但这似乎是问题所在。