代码之家  ›  专栏  ›  技术社区  ›  pgsandstrom

android光标奇怪的行为

  •  3
  • pgsandstrom  · 技术社区  · 14 年前

    在一个大型应用程序中搜索了许多小时的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 回复  |  直到 14 年前
        1
  •  1
  •   pgsandstrom    14 年前

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