Problems creating a login button using the Facebook SDK 4.1.2

I am trying to create an application that will allow users to register through their Facebook accounts. I wanted to use the new Facebook SDK 4.1.2 via eclipse. To use the new SDK in eclipse, I completed this tutorial . Now I can remove all errors from the facebook SDK file without eclipse. Then I started following these steps to integrate FB into the sample application using the new SDK.

I continued:

MainActivity :

import android.os.Bundle; import android.support.v4.app.FragmentActivity; import com.facebook.CallbackManager; import com.facebook.FacebookSdk; public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FacebookSdk.sdkInitialize(getApplicationContext()); if (savedInstanceState == null) { getFragmentManager() .beginTransaction() .add(R.id.fragmentParentViewGroup, new FacebookFragment()) .commit(); } } } 

activity_main.xml:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fragmentParentViewGroup" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MyActivity" tools:ignore="MergeRootFrame" /> 

Facebook snippet:

 import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; import com.facebook.FacebookSdk; import com.facebook.login.LoginResult; import com.facebook.login.widget.LoginButton; public class FacebookFragment extends Fragment{ CallbackManager callbackManager; @Override public View onCreateView(LayoutInflater inflater, ViewGroup parentViewGroup, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.facebook_fragment, parentViewGroup, false); FacebookSdk.sdkInitialize(getActivity()); callbackManager = CallbackManager.Factory.create(); LoginButton loginButton = (LoginButton) rootView.findViewById(R.id.login_button); loginButton.setReadPermissions("user_friends"); // If using in a fragment // loginButton.setFragment(this); // Callback registration loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { // App code } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { // App code } }); return rootView; } } 

Facebook_fragment.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF"> <com.facebook.login.widget.LoginButton android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp" android:layout_marginBottom="30dp" /> </RelativeLayout> 

manifesto:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.facbooksdk4test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.facbooksdk4test.MainActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" /> <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> </application> </manifest> 

After doing all of the above, I still get initialization errors. Logcat report:

 06-01 15:23:41.670: E/AndroidRuntime(23571): FATAL EXCEPTION: main 06-01 15:23:41.670: E/AndroidRuntime(23571): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.facbooksdk4test/com.facbooksdk4test.MainActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class com.facebook.login.widget.LoginButton 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2252) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2306) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.app.ActivityThread.access$700(ActivityThread.java:153) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1286) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.os.Handler.dispatchMessage(Handler.java:99) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.os.Looper.loop(Looper.java:176) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.app.ActivityThread.main(ActivityThread.java:5302) 06-01 15:23:41.670: E/AndroidRuntime(23571): at java.lang.reflect.Method.invokeNative(Native Method) 06-01 15:23:41.670: E/AndroidRuntime(23571): at java.lang.reflect.Method.invoke(Method.java:511) 06-01 15:23:41.670: E/AndroidRuntime(23571): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 06-01 15:23:41.670: E/AndroidRuntime(23571): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 06-01 15:23:41.670: E/AndroidRuntime(23571): at dalvik.system.NativeStart.main(Native Method) 06-01 15:23:41.670: E/AndroidRuntime(23571): Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class com.facebook.login.widget.LoginButton 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.view.LayoutInflater.createView(LayoutInflater.java:619) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:693) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.view.LayoutInflater.rInflate(LayoutInflater.java:752) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.view.LayoutInflater.rInflate(LayoutInflater.java:760) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 06-01 15:23:41.670: E/AndroidRuntime(23571): at com.facbooksdk4test.FacebookFragment.onCreateView(FacebookFragment.java:22) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.app.Fragment.performCreateView(Fragment.java:1699) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.app.BackStackRecord.run(BackStackRecord.java:682) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1455) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.app.Activity.performStart(Activity.java:5335) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2224) 06-01 15:23:41.670: E/AndroidRuntime(23571): ... 11 more 06-01 15:23:41.670: E/AndroidRuntime(23571): Caused by: java.lang.reflect.InvocationTargetException 06-01 15:23:41.670: E/AndroidRuntime(23571): at java.lang.reflect.Constructor.constructNative(Native Method) 06-01 15:23:41.670: E/AndroidRuntime(23571): at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 06-01 15:23:41.670: E/AndroidRuntime(23571): at android.view.LayoutInflater.createView(LayoutInflater.java:593) 06-01 15:23:41.670: E/AndroidRuntime(23571): ... 24 more 06-01 15:23:41.670: E/AndroidRuntime(23571): Caused by: java.lang.NoClassDefFoundError: com.facebook.R$styleable 06-01 15:23:41.670: E/AndroidRuntime(23571): at com.facebook.login.widget.LoginButton.parseLoginButtonAttributes(LoginButton.java:607) 06-01 15:23:41.670: E/AndroidRuntime(23571): at com.facebook.login.widget.LoginButton.configureButton(LoginButton.java:571) 06-01 15:23:41.670: E/AndroidRuntime(23571): at com.facebook.FacebookButtonBase.<init>(FacebookButtonBase.java:66) 06-01 15:23:41.670: E/AndroidRuntime(23571): at com.facebook.login.widget.LoginButton.<init>(LoginButton.java:209) 06-01 15:23:41.670: E/AndroidRuntime(23571): ... 27 more 

I am not sure where I am going wrong, or what needs to be done to fix the problems. Please suggest me what needs to be done to fix the same.

+1
android logging facebook
Jun 01 '15 at 10:11
source share
4 answers

I do not see the onActivityResult method in your code. This is necessary for the correct SDK workflow.

You need to add it to MainActivity:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } 

Cause:

Each activity and fragment that you integrate with the FacebookSDK Login or Share should redirect onActivityResult to the callbackManager.

You can find it in the documentation here .

+5
Jun 01 '15 at 12:07 on
source share

The problem may arise due to the uninitialization of FacebookSdk before using it. Try initializing facebook sdk to:

1.setContentView (R.layout.activity_main); (In action)

2.View rootView = inflater.inflate (R.layout.facebook_fragment, parentViewGroup, false); (In fragment)

Hope this helps!

+3
Jun 01 '15 at 11:11
source share

Make sure you initialize the facebook SDK before you blow it.

 FacebookSdk.sdkInitialize(getActivity()); View rootView = inflater.inflate(R.layout.facebook_fragment, parentViewGroup, false); 
+1
Apr 09 '16 at 9:27
source share

You initialized facebook sdk in both MainActivity and FacebookFragment, which is not needed, only once is enough, and you better initialize it in the superclass, here, probably in your MainActivity.

Delete this line FacebookSdk.sdkInitialize(getActivity()); from FacebookFragemet,

and swap in MainActivity

 FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_main); 
0
May 13 '16 at 8:49
source share



All Articles