【发布时间】:2010-05-06 09:38:13
【问题描述】:
在一个大型应用程序中搜索了数小时的错误后,我终于找到了错误。此日志记录了问题:
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”在一种情况下被解释为假,而在另一种情况下被解释为真。由于我完全不知道这是如何发生的,我不知道如何进行。什么可能导致这种行为?这两列都是“布尔”类型,即 sqlite 中的数字。不幸的是,返回的字符串是正确的值,而整数始终为 0。如果我将数据库导出到我的计算机并使用 SQlite Administrator 检查它,我可以看到这些值设置正确,只有 getInt() 函数总是返回 0。我知道这适用于我编写的其他应用程序,但我不知道为什么它停止工作。
我试过在2.0、2.0.1和2.1下编译代码,总是出现。我可以通过获取这样的布尔值使我的应用程序再次可运行:
myBool= (DBresult.getString(0).equals("true"));
但这既丑陋又没有优化。欢迎就导致此行为的原因提出任何建议。
干杯,
【问题讨论】:
-
能否请您添加插入语句和表格详细信息?
-
谢谢,由于您的要求,我直接找到了问题的根源 =)
-
我发现没有实现 getBoolean 方法很有趣。尽管如此,我还是倾向于使用整数而不是布尔值,因为空间太便宜了。