2012-10-09 65 views
0

我有我在谷歌的AppEngine应用将引发NullPointerException异常像一个令人沮丧的问题:谷歌的AppEngine:User.equals引发NullPointerException异常

java.lang.NullPointerException 
    at com.google.appengine.api.users.User.equals(User.java:143) 

我的代码如下所示:

if (excludeUser.equals(someEntity.getProperty("user"))) 

在用户属性实体是先前存储在数据存储中的另一个用户对象。即使我的代码更改为类似下面,它不会引发异常:

if (excludeUser.equals(null)) 

所以我想这是在User.equals一些内部逻辑存储用户时,引起该问题,或其他一些棘手的事情对象进入数据存储?

此外,逻辑在开发环境中运行良好。这个问题只发生在GAE上。

我使用Google帐户API,而不是联合登录名。我尝试了他们两个。结果相同。任何线索表示赞赏,谢谢。

回答

0

事情从UserService.getUser()中变成特例。不知道为什么它返回一个非空的用户,具有以下内容:

authDomain:https://www.google.com/accounts/o8/ud, 
email:, 
federatedId:https://www.google.com/accounts/o8/id?id=....., 
nickname:, 
userId: 

与其他正常用户的对象,对象上调用.equals方法产生的NullPointerException异常。猜猜这是联合登录怪人的一些情况?

0

检查您的someEntity对象..它很可能是一个空对象,因为您看到该错误。我建议单步执行代码并验证该对象是否为空。

+0

该对象不为空。首先可以从管理控制台中的数据存储查看器查看它。第二我显式更改该值为空,并没有这样的异常(这意味着User.equals(空)工作正常)。第三,它适用于开发环境......这个问题真的很让人困惑:(... – Verilocos

+0

最有可能的是excludeUser为null如果excludeUser对象从数据存储中被取出,那么生产数据存储中的数据可能与你的dev_appserver版本会导致它崩溃 – dragonx

+0

excludeUser不为null在User.equals()方法本身内部抛出空指针异常所以调用者引用(excludeUser)不应该为null – Verilocos

0

这是User.equals()中的一个错误。请拨federatedIdentity.equalshere

该行应为return federatedIdentity.equals(user.federatedIdentity)

我已经向Google报告过这个问题。

相关问题