2011-02-09 113 views
3

我有一個Android應用程序,除其他外,還在Facebook上發佈更新。Android Facebook SDK - 問題與authorizeCallback()

我創建了我的代碼,根據this的例子,它工作得很好。我的代碼和上面鏈接的唯一區別在於,我還擴展了onActivityResult,正如官方Facebook SDK for Android頁面所述。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    facebookClient.authorizeCallback(requestCode, resultCode, data); 
} 

但是有時候,我上線一個空指針異常,我稱之爲「facebook.authorizeCallback()」的onActivityResult()方法中。

這從來沒有發生過我的任何手機或模擬器。但是,我不斷收到用戶崩潰報告,主要來自Droid和T-Mobile myTouch 3G手機。我嘗試了很多,但無法重現問題。任何機構都有什麼想法可能是錯的?

+0

這可能是因爲當您的應用程序通過調用回調來重新啓動時,會爲您的活動創建一個新實例。但是,** facebookClient **僅在** onClick()**中實例化。 – ldx

+0

如果是這樣的話,每次我嘗試發佈一些內容到Facebook上都不會發生這個問題嗎?但是,這個問題發生的時間不到1%。 –

+0

你能解決這個問題嗎?我有同樣的問題:在我的手機/模擬器上工作,但在其他手機(即Moto Droids)上崩潰。 –

回答

2

通過查看Facebook.java代碼,它似乎是DialogListener,並保存爲類中的私有參數...當調用authorizeCallback()時,您認爲DialogListener退出並且不爲null。但如果你的手機存儲空間不足(就像我的G1一樣),你的調用活動就會被殺死,爲Facebook登錄進程騰出內存,當你調用autherizeCallback函數時會清除你的DialogListener,你會得到一個空指針異常或者忽略回調。 這可能是您的問題的原因。

1

我有同樣的問題,並解決它複製Facebook.DialogListener.onComplete(Bundle values)代碼捕獲內facebookClient.authorizeCallback(requestCode, resultCode, data) NPE。

首先我嘗試了代碼,但沒有調用authorizeCallback,但會話尚未建立。 authorizeCallback做了所需的一切,只是未能調用監聽器。因此,在NPE catch中複製監聽邏輯似乎可以解決問題。

+0

非常有趣。我從來沒有能夠在自己的手機上重現這個問題,但是,當我下次見他時,讓我在我朋友的電話上試用一下,然後回過頭來看看它的成功程度。感謝分享它。 –

0

我有同樣的問題,我的應用程序的一些用戶報告了chrash,也許最後,我已經能夠系統地重現問題。 在Android 4上,「開發人員選項」,「不要保留活動」中有一個參數。 如果啓用它,每次通過SSO與應用程序進行登錄時,都會發生崩潰。 問題發生在Facebook.class裏面:mAuthDialogListener.onComplete(data.getExtras()); ,因爲mAuthDialogListener爲空。 這種解決問題的方法等同於Raanan提到的情況。