0
votes

I'm trying to implement login with Facebook using Firebase Authentication so I followed all the steps

so first I added FacebookActivity in my AndroidManifest :

<activity android:name="com.facebook.FacebookActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:label="@string/app_name" />

second I added login button to my Fragment :

<com.facebook.login.widget.LoginButton
    android:id="@+id/btn_login_facebook"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" />  

and finally this is my following code :

    FacebookSdk.sdkInitialize(getApplicationContext());
    mCallbackManager = CallbackManager.Factory.create();
    LoginButton btn_login_facebook = (LoginButton) view.findViewById(R.id.btn_login_facebook);
    btn_login_facebook.setReadPermissions("email");
    btn_login_facebook.setFragment(this);
    btn_login_facebook.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Log.i(TAG, "onSuccess:");
        }
        @Override
        public void onCancel() {
            Log.i(TAG, "onCancel: ");
        }
        @Override
        public void onError(FacebookException exception) {
            Log.i(TAG, "onError: ");
        }
    });

and I followed all the steps to add Facebook SDK and Facebook App ID on https://developers.facebook.com

so the problem here is when I start the app it cracked and I got this error :

Process: com.th3codefather.www.tripexp, PID: 21998 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.th3codefather.www.tripexp/com.th3codefather.www.tripexp.MainActivity}: android.view.InflateException: Binary XML file line #58: Error inflating class com.facebook.login.widget.LoginButton at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) 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:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: android.view.InflateException: Binary XML file line #58: Error inflating class com.facebook.login.widget.LoginButton at android.view.LayoutInflater.createView(LayoutInflater.java:633) 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 com.th3codefather.www.tripexp.LoginFragment.onCreateView(LoginFragment.java:54) at android.app.Fragment.performCreateView(Fragment.java:2053) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) at android.app.BackStackRecord.run(BackStackRecord.java:834) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452) at android.app.Activity.performStart(Activity.java:6005) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  at android.app.ActivityThread.access$800(ActivityThread.java:151)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:135)  at android.app.ActivityThread.main(ActivityThread.java:5254)  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:903)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  Caused by: java.lang.reflect.InvocationTargetException 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 com.th3codefather.www.tripexp.LoginFragment.onCreateView(LoginFragment.java:54)  at android.app.Fragment.performCreateView(Fragment.java:2053)  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894)  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)  at android.app.BackStackRecord.run(BackStackRecord.java:834)  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452)  at android.app.Activity.performStart(Activity.java:6005)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  at android.app.ActivityThread.access$800(ActivityThread.java:151)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:135)  at android.app.ActivityThread.main(ActivityThread.java:5254)  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:903)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  Caused by: The SDK has not been initialized, make sure to call FacebookSdk.sdkInitialize() first. at com.facebook.internal.Validate.sdkInitialized(Validate.java:145) at com.facebook.AccessTokenTracker.(AccessTokenTracker.java:55) at com.facebook.login.widget.LoginButton$2.(LoginButton.java:563) at com.facebook.login.widget.LoginButton.configureButton(LoginButton.java:563) at com.facebook.FacebookButtonBase.(FacebookButtonBase.java:64) at com.facebook.login.widget.LoginButton.(LoginButton.java:201) 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 com.th3codefather.www.tripexp.LoginFragment.onCreateView(LoginFragment.java:54)  at android.app.Fragment.performCreateView(Fragment.java:2053)  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:894)  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)  at android.app.BackStackRecord.run(BackStackRecord.java:834)  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452)  at android.app.Activity.performStart(Activity.java:6005)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  at android.app.ActivityThread.access$800(ActivityThread.java:151)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:135)  at android.app.ActivityThread.main(ActivityThread.java:5254)  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:903)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

1

1 Answers

2
votes

The initialization:

FacebookSdk.sdkInitialize(getApplicationContext());

should be done before setting the content view.

If you do:

setContentView(R.layout.activity_main);

before the intialization, the Facebook button won't be inflated into the activity.