0

我有一个令人沮丧的问题,我在 Google Appengine 上的应用会抛出 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 Accounts API,而不是联合登录。我都试过了。同样的结果。任何线索表示赞赏,谢谢。

4

3 回答 3

0

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

于 2012-10-09T03:13:41.517 回答
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。猜猜这是某种联合登录怪人?

于 2012-10-10T03:02:06.923 回答
0

这是 User.equals() 中的一个错误。

federatedIdentity.equals 对这里的调用应该被翻转。

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

我已将此情况报告给 Google。

于 2014-03-31T09:21:09.550 回答