我有一个令人沮丧的问题,我在Google Appengine上的应用会抛出NullPointerException,如:
java.lang.NullPointerException
at com.google.appengine.api.users.User.equals(User.java:143)
我的代码如下:
if (excludeUser.equals(someEntity.getProperty("user")))
实体中的用户属性是先前存储在数据存储区中的另一个User对象。即使我将代码更改为类似以下内容,它也不会引发异常:
if (excludeUser.equals(null))
所以我猜这是User.equals中的一些内部逻辑导致问题,或者将用户对象存储到数据存储区时的其他一些棘手的事情?
此外,逻辑在开发环境中运行良好。这个问题只发生在GAE上。
我使用的是Google帐户API,而不是联合登录。我试过了两个。同样的结果。感谢任何线索,谢谢。
答案 0 :(得分:0)
检查你的someEntity
对象..由于你看到了这个错误,它可能是一个空对象。我建议单步执行代码并验证该对象是否为空。
答案 1 :(得分:0)
事情结果是UserService.getUser()的特例。不知道为什么它返回一个非null用户,具有以下内容:
authDomain:https://www.google.com/accounts/o8/ud,
email:,
federatedId:https://www.google.com/accounts/o8/id?id=.....,
nickname:,
userId:
使用其他普通User对象对此类对象调用.equals方法会导致NullPointerException。猜猜这是联邦登录怪人的某种?
答案 2 :(得分:0)
这是User.equals()中的错误。
应该翻转对federatedIdentity.equals
here的来电。
该行应为return federatedIdentity.equals(user.federatedIdentity)
。
我已经向Google报告了此情况。