2012-10-09 102 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報告過這個問題。

相關問題