2015-04-17 58 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())//在这里做你的应用程序邀请