为Android实现Facebook登录按钮时出错
我正在尝试为我的下一个Android应用程序实现Facebook登录功能。我已经阅读了Facebook开发网站上的教程。一切似乎都很好。但是,一旦我实现了以下代码:为Android实现Facebook登录按钮时出错,android,facebook-login,Android,Facebook Login,我正在尝试为我的下一个Android应用程序实现Facebook登录功能。我已经阅读了Facebook开发网站上的教程。一切似乎都很好。但是,一旦我实现了以下代码: <com.facebook.login.widget.LoginButton android:id="@+id/login_button" android:layout_width="fill_parent" android:layout_height="wrap_content" androi
<com.facebook.login.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:layout_below="@id/tvLoginRegister"/>
编译时,显示以下错误:
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:607)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
at com.myapp.myapp.LoginActivity.onCreate(LoginActivity.java:26)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
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:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
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:607)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
atandroid.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
at com.myapp.myapp.LoginActivity.onCreate(LoginActivity.java:26)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
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:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
java.lang.ExceptionInInitializeError
位于java.lang.reflect.Constructor.newInstance(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:288)
位于android.view.LayoutInflater.createView(LayoutInflater.java:607)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
在android.view.LayoutInflater.充气(LayoutInflater.java:504)
在android.view.LayoutInflater.inflate(LayoutInflater.java:414)
在android.view.LayoutInflater.充气(LayoutInflater.java:365)
在android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
位于android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
在com.myapp.myapp.LoginActivity.onCreate上(LoginActivity.java:26)
位于android.app.Activity.performCreate(Activity.java:5933)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)上
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)上
在android.app.ActivityThread.access$800(ActivityThread.java:144)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5221)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
原因:空
在com.facebook.internal.Validate.sdkinInitialized上(Validate.java:99)
访问com.facebook.FacebookSdk.getCallbackRequestCodeOffset(FacebookSdk.java:735)
在com.facebook.internal.CallbackManagerImpl$RequestCodeOffset.toRequestCode(CallbackManagerImpl.java:109)上
登录到com.facebook.login.widget.LoginButton。(LoginButton.java:58)
位于java.lang.reflect.Constructor.newInstance(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:288)
位于android.view.LayoutInflater.createView(LayoutInflater.java:607)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
在android.view.LayoutInflater.充气(LayoutInflater.java:504)
在android.view.LayoutInflater.inflate(LayoutInflater.java:414)
在android.view.LayoutInflater.充气(LayoutInflater.java:365)
atandroid.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
位于android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
在com.myapp.myapp.LoginActivity.onCreate上(LoginActivity.java:26)
位于android.app.Activity.performCreate(Activity.java:5933)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)上
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)上
在android.app.ActivityThread.access$800(ActivityThread.java:144)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5221)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
以前有人面对过这个问题吗
提前感谢。我假设您正在使用facebook sdk 4.0。以下是一些提示: 1) 清单材料: 确保在清单中声明了此活动:
<activity
android:name="com.facebook.LoginActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
您是否在活动结果中调用了它?(请记住,如果这是在片段
中,则必须在ActivityonActivityResult
方法中调用片段实例的onActivityResult
)
3) 最后,您是否使用了一些gradle依赖项,如编译com.facebook.android:facebook android sdk:+'?。如果没有,试试看
让我知道这是否对你有帮助。如果没有,我将询问您有关此问题的更多反馈/代码
更新:
在xml布局中,xml父级(RelativeLayout
,LinearLayout
,FrameLayout
等)中是否有此属性
xmlns:facebook=”http://schemas.android.com/apk/res-auto“
在我的xml中,我有:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/container_login"
android:layout_width="match_parent"
android:focusableInTouchMode="true"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/colorPrimary"
xmlns:facebook="http://schemas.android.com/apk/res-auto"
>
<com.facebook.login.widget.LoginButton
android:id="@+id/fb_login_button"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_below="@+id/btn_login"
facebook:confirm_logout="false"
android:textSize="16sp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_marginTop="@dimen/keyline_1" />
</LinearLayout>
我也遇到了您提到的这个错误,不仅是在我自己的应用程序中,而且在使用th
mCallback = CallbackManager.Factory.create();
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/container_login"
android:layout_width="match_parent"
android:focusableInTouchMode="true"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/colorPrimary"
xmlns:facebook="http://schemas.android.com/apk/res-auto"
>
<com.facebook.login.widget.LoginButton
android:id="@+id/fb_login_button"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_below="@+id/btn_login"
facebook:confirm_logout="false"
android:textSize="16sp"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_marginTop="@dimen/keyline_1" />
</LinearLayout>