2015-04-17 69 views
5

我已經在我的android studio項目中集成了Facebook SDK,但是當我運行該應用程序時,app強行關閉。 設計師在使用com.facebook.login.widget.LoginButton時存在jsonexception錯誤,但它只是一個設計器錯誤。app forceclose開始facebook活動

錯誤日誌:

> 04-17 19:29:35.996 24734-24734/com.example.bandhan.myapplication1 
> E/AndroidRuntime﹕ FATAL EXCEPTION: main 
>  Process: com.example.bandhan.myapplication1, PID: 24734 
>  java.lang.ExceptionInInitializerError 
>    at java.lang.reflect.Constructor.newInstance(Native Method) 
>    at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
>    at android.view.LayoutInflater.createView(LayoutInflater.java:614) 
>    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750) 
>    at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
>    at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
>    at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
>    at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
>    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:435) 
>    at android.app.Activity.setContentView(Activity.java:2267) 
>    at com.example.bandhan.myapplication1.Share_Activity.onCreate(Share_Activity.java:15) 
>    at android.app.Activity.performCreate(Activity.java:6289) 
>    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
>    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 
>    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2760) 
>    at android.app.ActivityThread.access$900(ActivityThread.java:177) 
>    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
>    at android.os.Handler.dispatchMessage(Handler.java:102) 
>    at android.os.Looper.loop(Looper.java:145) 
>    at android.app.ActivityThread.main(ActivityThread.java:5944) 
>    at java.lang.reflect.Method.invoke(Native Method) 
>    at java.lang.reflect.Method.invoke(Method.java:372) 
>    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389) 
>    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184) 
>  Caused by: null 
>    at com.facebook.internal.Validate.sdkInitialized(Validate.java:99) 
>    at com.facebook.FacebookSdk.getCallbackRequestCodeOffset(FacebookSdk.java:735) 
>    at com.facebook.internal.CallbackManagerImpl$RequestCodeOffset.toRequestCode(CallbackManagerImpl.java:109) 
>    at com.facebook.login.widget.LoginButton.<clinit>(LoginButton.java:58) 
>             at java.lang.reflect.Constructor.newInstance(Native Method) 
>             at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
>             at android.view.LayoutInflater.createView(LayoutInflater.java:614) 
>             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750) 
>             at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
>             at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
>             at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
>             at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
>             at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:435) 
>             at android.app.Activity.setContentView(Activity.java:2267) 
>             at com.example.bandhan.myapplication1.Share_Activity.onCreate(Share_Activity.java:15) 
>             at android.app.Activity.performCreate(Activity.java:6289) 
>             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
>             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 
>             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2760) 
>             at android.app.ActivityThread.access$900(ActivityThread.java:177) 
>             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
>             at android.os.Handler.dispatchMessage(Handler.java:102) 
>             at android.os.Looper.loop(Looper.java:145) 
>             at android.app.ActivityThread.main(ActivityThread.java:5944) 
>             at java.lang.reflect.Method.invoke(Native Method) 
>             at java.lang.reflect.Method.invoke(Method.java:372) 
>             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389) 
>             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184) 

請幫我解決這個問題。 謝謝。

回答

10

如果你在Facebook的Validate類看99行,你會看到它拋出一個FacebookSdkNotInitializedException

你需要你的LoginButton被加載之前調用FacebookSdk.sdkInitialize(Context)(即您的來電setContentView()

所以,在ActivityonCreate方法:

public void onCreate(Bundle savedInstance){ 
    super.onCreate(savedInstance); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 
    setContentView(R.layout.my_layout); // Now you can set the layout with the LoginButton 
} 

任何時候你要使用Facebook的組件,您需要確保是t他SDK被初始化。

此外,請確保您的清單中有您的Facebook應用程序ID的元數據密鑰,否則當您嘗試實際按下LoginButton時,您將遇到另一個問題。

+0

是的,你說得對。這就像一個魅力。但問題是我不能在xml文件中使用fb:fetch_user數據,而在java文件中使用uilifecycle。其他一切都很完美。謝謝。 –

+0

只要您在添加包含Facebook數據的XML之前調用FacebookSdk.sdkInitialize,那麼您應該很好 – Guardanis

+0

實際上,fb:fetch:xml中的數據和java文件中的uilifecycle不會從庫中獲取。順便說一句,我使用的是最新版本的fbsdk。謝謝 –

0

老實說,這個解決方案不是很好的證明。

儘管我在setContentView()之前調用了初始化代碼,但我仍然得到該異常的報告。

你可以做的還是添加一個if條件以確保Facebook已完成初始化。

if(FacebookSdk.isInitialized())//在這裏做你的應用程序邀請