1

我在我的应用程序中执行此数据库操作,我在其中提取某个列值以检查它是否存在。我在执行查询并将值分配给字符串时没有问题(我什至可以在日志中输出这个值)。当我尝试检查我的字符串是否等于 null 时,我的问题就出现了,具有讽刺意味的是,我得到了一个 NullPointer。

这是我的功能:

public boolean isDone(String id){
    boolean isDone = false;
    String timeOut = new String();
    timeOut = "A";

    String query = "SELECT TimeOut FROM " + TABLE_ROUTE_TABLE + " WHERE _id = '" + id + "'";
    Cursor cursor = mDB.rawQuery(query, null);

    if(cursor.moveToFirst()){
        timeOut = cursor.getString(cursor.getColumnIndex("TimeOut"));
        Log.d("Hi", "timeOut = " + timeOut);
    }

    if(timeOut.equals(null)){
        isDone = false;
    }
    else{
        isDone = true;
    }

    return isDone;
}

我在if(timeOut.equals(null)). 当我能够使用它并显示它的值(有时可能为空)时,我不明白为什么当我将字符串作为布尔条件的一部分时会得到 NPE。

我有一种感觉,我忽略了一些基本的东西。有任何想法吗?

4

4 回答 4

2

如果您的 timeOut 变量为 null,则此测试将始终导致 NPE,因为 null 实例没有方法。您应该使用 == 运算符进行测试,例如timeOut == null.

但是,为什么它为空,我无法理解,因为您说它在打印时具有价值。

于 2013-09-03T13:46:06.327 回答
1

问题是相等比较 2 个字符串,因为其中一个为空,所以你得到 NPE。

你可以通过测试来修复它

超时 == 空

于 2013-09-03T13:48:45.987 回答
1

是的...空实例没有方法..

所以你应该初始化你的变量timeOut==null;

于 2013-09-03T13:49:29.860 回答
1

空值检查应该以这种方式完成:

 if(timeout == null)

因为您想知道对象是否存在,这意味着指针是否为空。字符串的内容不能为空,但指向它的指针可以为空。

于 2013-09-03T13:51:26.447 回答