Error inflating class com.facebook.widget.LoginButton with Facebook SDK 4.0.1

44,084

Solution 1

In facebook sdk 4.0.1, LoginButton class is not inside com.facebook.widget package. It is inside com.facebook.login.widget package. So your xml declaration should look like this:

  <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" />

Solution 2

Caused by: The SDK has not been initialized, make sure to call FacebookSdk.sdkInitialize() first.

Make sure you initialized facebook SDK before setContentView.

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

Solution 3

Only add this methods of your app's Application class::

FacebookSdk.sdkInitialize(getApplicationContext());

AppEventsLogger.activateApp(this);

Befeore: setContentView in onCreate Activity.

In dependencies import:

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

Enjoy :)

Solution 4

Don't forget to added the android app id in the android manifest inside the application xml tag

<application> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> </application>

Solution 5

hey friends all your code is right. follow below instructions.

put FacebookSdk.sdkInitialize(getApplicationContext()); before setContentView();

and put following line in your xml parent layout

xmlns:facebook="http://schemas.android.com/apk/res-auto"

like,

<?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>
Share:
44,084
Mattias Johansson
Author by

Mattias Johansson

Day time works as a solution architect for a SAP shop, at nighttime plays with everything except SAP

Updated on April 04, 2020

Comments

  • Mattias Johansson
    Mattias Johansson about 4 years

    I know this is a very common question, btu I have read through all the stack overflow questions without finding an answer.

    I'm trying to integrate the Facebook Login Button using Facebook SDK 4.0.1 added through Gradle, but I get the following error.

      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)
    

    I can see the LoginButton class in Android Studio, so it kind of works

    Here's my build.gradle dependencies

    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'
    }
    

    Here's my layout

    <?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>
    

    And the relevant parts of my activity

    @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);
            }
        }