我在我的应用程序中执行此数据库操作,其中我拉取某个列值以检查它是否存在。我没有问题执行查询并将值分配给字符串(我甚至可以在日志中输出此值)。当我试图检查我的字符串是否等于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。当我将字符串作为布尔条件的一部分时,当我能够使用它并显示其值(有时可能为null)时,我不明白为什么我得到NPE。
我有一种感觉,我忽略了一些基本的东西。有什么想法吗?
答案 0 :(得分:2)
如果您的timeOut变量为null,则此测试将始终导致NPE,因为null实例没有方法。您应该使用==运算符进行测试,例如timeOut == null
。
为什么它是null,但是,我无法理解,因为你说它在打印时有价值。
答案 1 :(得分:1)
问题是equals将2个字符串比较在一起,因为其中一个为null,你得到了NPE。
您可以通过测试
来修复它timeOut == null
答案 2 :(得分:1)
是的... null实例没有方法..
因此,您应该初始化变量 timeOut == null;
答案 3 :(得分:1)
应该以这种方式进行空检查:
if(timeout == null)
因为你想知道对象是否存在,这意味着,如果指针是否为空。字符串的内容不能为null,但指向它的指针可以为null。