Error al inflar la clase com.facebook.widget.LoginButton con Facebook SDK 4.0.1

Sé que esta es una pregunta muy común, btu He leído todas las preguntas de desbordamiento de pila sin encontrar una respuesta.

Estoy intentando integrar el botón del acceso de Facebook usando Facebook SDK 4.0.1 agregado con Gradle, pero consigo el error siguiente.

java.lang.RuntimeException: Unable to start activity ComponentInfo{se.speedle.android/com.bryderi.speedle.android.activity.MainActivity}: android.view.InflateException: Binary XML file line #26: Error inflating class com.facebook.widget.LoginButton at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) at android.app.ActivityThread.access$600(ActivityThread.java:141) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5103) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #26: Error inflating class com.facebook.widget.LoginButton at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707) at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) at android.view.LayoutInflater.inflate(LayoutInflater.java:492) at android.view.LayoutInflater.inflate(LayoutInflater.java:397) at android.view.LayoutInflater.inflate(LayoutInflater.java:353) at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228) at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) at com.bryderi.speedle.android.activity.MainActivity.onCreate(MainActivity.java:36) at android.app.Activity.performCreate(Activity.java:5133) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)             at android.app.ActivityThread.access$600(ActivityThread.java:141)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)             at android.os.Handler.dispatchMessage(Handler.java:99)             at android.os.Looper.loop(Looper.java:137)             at android.app.ActivityThread.main(ActivityThread.java:5103)             at java.lang.reflect.Method.invokeNative(Native Method)             at java.lang.reflect.Method.invoke(Method.java:525)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)             at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.facebook.widget.LoginButton" on path: DexPathList[[zip file "/data/app/se.speedle.android-1.apk"],nativeLibraryDirectories=[/data/app-lib/se.speedle.android-1, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53) at java.lang.ClassLoader.loadClass(ClassLoader.java:501) at java.lang.ClassLoader.loadClass(ClassLoader.java:461) at android.view.LayoutInflater.createView(LayoutInflater.java:559) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)             at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)             at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)             at android.view.LayoutInflater.inflate(LayoutInflater.java:492)             at android.view.LayoutInflater.inflate(LayoutInflater.java:397)             at android.view.LayoutInflater.inflate(LayoutInflater.java:353)             at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)             at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)             at com.bryderi.speedle.android.activity.MainActivity.onCreate(MainActivity.java:36)             at android.app.Activity.performCreate(Activity.java:5133)             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)             at android.app.ActivityThread.access$600(ActivityThread.java:141)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)             at android.os.Handler.dispatchMessage(Handler.java:99)             at android.os.Looper.loop(Looper.java:137)             at android.app.ActivityThread.main(ActivityThread.java:5103)             at java.lang.reflect.Method.invokeNative(Native Method)             at java.lang.reflect.Method.invoke(Method.java:525) 

Puedo ver la clase LoginButton en Android Studio, por lo que tipo de obras

Aquí están mis dependencias de build.gradle

 dependencies { aspects 'org.robobinding:robobinding:0.8.9' compile 'org.springframework.android:spring-android-rest-template:2.0.0.M1' compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.android.support:support-v4:21.0.3' compile 'com.android.support:support-v13:21.0.3' compile 'com.android.support:recyclerview-v7:21.0.3' compile 'com.fasterxml.jackson.core:jackson-databind:2.3.2' compile 'com.jakewharton:butterknife:6.1.0' compile 'com.facebook.android:facebook-android-sdk:4.0.1' compile 'me.alexrs:recyclerview-renderers:1.0.3' compile 'com.google.android.gms:play-services:6.5.87' } 

Aquí está mi diseño

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:facebook="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical" android:padding="20dp" > <com.facebook.widget.LoginButton android:id="@+id/connectWithFbButton" style="@style/com_facebook_loginview_default_style" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="center_horizontal" android:text=" connect_with_facebook"/> </LinearLayout> 

Y las partes relevantes de mi actividad

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); callbackManager = CallbackManager.Factory.create(); setContentView(R.layout.activity_main); // Set a Toolbar to replace the ActionBar. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); // Find our drawer view dlDrawer = (FragmentNavigationDrawer) findViewById(R.id.drawer_layout); // Setup drawer view dlDrawer.setupDrawerConfiguration((ListView) findViewById(R.id.lvDrawer), toolbar, R.layout.drawer_nav_item, R.id.flContent); // Add nav items dlDrawer.addNavItem("Home", "First Fragment", ClassifiedsFragment.class); dlDrawer.addNavItem("Favourites", "Favourites", ClassifiedsFragment.class); dlDrawer.addNavItem("My Items", "Items", ClassifiedsFragment.class); dlDrawer.addNavItem("Settings", "Settings", ClassifiedsFragment.class); //dlDrawer.addNavItem("Second", "Second Fragment", SecondFragment.class); //dlDrawer.addNavItem("Third", "Third Fragment", ThirdFragment.class); // Select default if (savedInstanceState == null) { dlDrawer.selectDrawerItem(0); } } 

En facebook sdk 4.0.1, la clase LoginButton no está dentro del paquete com.facebook.widget . Está dentro del paquete com.facebook.login.widget . Por lo tanto, su declaración xml debería tener este aspecto:

  <com.facebook.login.widget.LoginButton android:id="@+id/connectWithFbButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="center_horizontal" android:text=" connect_with_facebook" /> 

Causado por: El SDK no se ha inicializado, asegúrese de llamar a FacebookSdk.sdkInitialize () primero.

Asegúrese de inicializar SDK de Facebook antes de setContentView.

 FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_main); 

Sólo agregue estos métodos de la clase de aplicación de su aplicación:

 FacebookSdk.sdkInitialize(getApplicationContext()); AppEventsLogger.activateApp(this); 

Befeore: setContentView en onCreate Actividad.

En importación de dependencias:

 compile 'com.facebook.android:facebook-android-sdk:[4,5)' or smaller 

Disfruta

Hey amigos todo tu código es correcto. Siga las instrucciones a continuación.

Poner FacebookSdk.sdkInitialize (getApplicationContext ()); Antes de setContentView ();

Y ponga la línea siguiente en su disposición del padre del xml

Xmlns: facebook = "http://schemas.android.com/apk/res-auto&quot;

me gusta,

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:facebook="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.facebook.login.widget.LoginButton android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="center_horizontal" android:layout_marginBottom="30dp" android:layout_marginTop="30dp" /> </RelativeLayout> 

Asegúrese de que su SDK de Facebook se inicializa antes de setContentView FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_main); FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_main);

En Facebook, el paquete está desactualizado. Para las nuevas versiones, 4 y hasta el nuevo paquete para el botón es com.facebook.login.widget.LoginFacebook.

Dependencias:

 compile 'com.facebook.android:facebook-android-sdk:4.5.0' 

Activity_login.xml:

 <com.facebook.login.widget.LoginButton android:id="@+id/connectWithFbButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="center_horizontal" /> 

¡Disfrutar!

El SDK no se ha inicializado, asegúrese de llamar a FacebookSdk.sdkInitialize () primero

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(this.getApplicationContext()); setContentView(R.layout.activity_main1); } 
  • Prácticas recomendadas (lo mejor para Android): autenticar a un usuario con acceso a Facebook o Google
  • Android, botón de inicio de sesión de Facebook causa bloqueo (SDK 4.0.0)
  • Acceso a Facebook en el navegador de celulares a través de la aplicación de Facebook
  • No se puede reloginar con las credenciales de Facebook después de cerrar la sesión
  • La verificación instantánea de Facebook no está verificando el número de móvil a través de la aplicación de Facebook
  • Facebook Login / Google Login - ¿La misma actividad?
  • El inicio de sesión de API de Facebook falla con la aplicación FB instalada en el teléfono
  • Error de inicio de sesión: hay un error al iniciar sesión en esta aplicación. Por favor, inténtelo de nuevo más tarde
  • Error en la entrada de Facebook de Android
  • Inicio de sesión de Facebook en el fragmento en android
  • Facebook SDK 4.0.1 Iniciar sesión sin iniciar sesión
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.