Error al inflacionar la clase com.facebook.widget.LoginButton

He construido una integración de Facebook utilizando los pasos de la documentación 3.0. Funciona bien cuando implemento la aplicación en mi teléfono con Eclispe; sin embargo, cuando exporte la aplicación para cargarla en el almacén y cargar lateralmente el apk, falla con el siguiente error. El SDK está allí y cargado, cuando lo exporte. ¿Alguna pista sobre dónde me equivoco?

03-18 21:01:02.089: E/AndroidRuntime(14834): FATAL EXCEPTION: main 03-18 21:01:02.089: E/AndroidRuntime(14834): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.telvista.facebooksupport/com.telvista.facebooksupport.SplashActivity}: android.view.InflateException: Binary XML file line #51: Error inflating class com.facebook.widget.LoginButton 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2088) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.ActivityThread.access$700(ActivityThread.java:139) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1224) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.os.Handler.dispatchMessage(Handler.java:99) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.os.Looper.loop(Looper.java:137) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.ActivityThread.main(ActivityThread.java:4918) 03-18 21:01:02.089: E/AndroidRuntime(14834): at java.lang.reflect.Method.invokeNative(Native Method) 03-18 21:01:02.089: E/AndroidRuntime(14834): at java.lang.reflect.Method.invoke(Method.java:511) 03-18 21:01:02.089: E/AndroidRuntime(14834): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) 03-18 21:01:02.089: E/AndroidRuntime(14834): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 03-18 21:01:02.089: E/AndroidRuntime(14834): at dalvik.system.NativeStart.main(Native Method) 03-18 21:01:02.089: E/AndroidRuntime(14834): Caused by: android.view.InflateException: Binary XML file line #51: Error inflating class com.facebook.widget.LoginButton 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.createView(LayoutInflater.java:613) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.rInflate(LayoutInflater.java:749) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 03-18 21:01:02.089: E/AndroidRuntime(14834): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:306) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.Activity.setContentView(Activity.java:1901) 03-18 21:01:02.089: E/AndroidRuntime(14834): at com.telvista.facebooksupport.SplashActivity.onCreate(SplashActivity.java:29) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.Activity.performCreate(Activity.java:5048) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2052) 03-18 21:01:02.089: E/AndroidRuntime(14834): ... 11 more 03-18 21:01:02.089: E/AndroidRuntime(14834): Caused by: java.lang.reflect.InvocationTargetException 03-18 21:01:02.089: E/AndroidRuntime(14834): at java.lang.reflect.Constructor.constructNative(Native Method) 03-18 21:01:02.089: E/AndroidRuntime(14834): at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 03-18 21:01:02.089: E/AndroidRuntime(14834): at android.view.LayoutInflater.createView(LayoutInflater.java:587) 03-18 21:01:02.089: E/AndroidRuntime(14834): ... 23 more 03-18 21:01:02.089: E/AndroidRuntime(14834): Caused by: java.lang.NoClassDefFoundError: com.facebook.android.R$color 03-18 21:01:02.089: E/AndroidRuntime(14834): at com.facebook.widget.LoginButton.<init>(LoginButton.java:204) 03-18 21:01:02.089: E/AndroidRuntime(14834): ... 26 more 

Aquí está el manifiesto:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.t.facebooksupport" android:versionCode="21" android:versionName="2.1" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="false" android:icon="@drawable/t_logo" android:label="@string/app_name"> <activity android:theme="@android:style/Theme.NoTitleBar" android:name="com.t.facebooksupport.SplashActivity" android:icon="@drawable/t_logo" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.t.facebooksupport.MainActivity"> </activity> <activity android:name="com.t.facebooksupport.ViewPost"> </activity> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> <activity android:label="@string/app_name" android:name="com.facebook.LoginActivity"></activity> </application> </manifest> 

Página Splash con el botón de inicio de sesión:

 package com.t.facebooksupport; import java.util.Arrays; import java.util.Map; import com.facebook.Request; import com.facebook.Response; import com.facebook.Session; import com.facebook.SessionState; import com.facebook.UiLifecycleHelper; import com.facebook.model.GraphUser; import com.facebook.widget.LoginButton; import com.t.facebooksupport.helper.PostConstants; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; public class SplashActivity extends Activity { private UiLifecycleHelper uiHelper; private boolean isResumed = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash); uiHelper = new UiLifecycleHelper(this, callback); Session session = Session.getActiveSession(); if (session != null && session.isOpened()) { startActivity(new Intent(SplashActivity.this, MainActivity.class)); } LoginButton authButton = (LoginButton) findViewById(R.id.login_button); authButton.setReadPermissions(Arrays.asList("email")); } private void onSessionStateChange(Session session, SessionState state, Exception exception) { if (isResumed) { if (state.isOpened()) { Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { // Display the parsed user info SharedPreferences settings = getSharedPreferences(PostConstants.PREFS_NAME, Activity.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putString("fb_id", user.getId()); editor.putString("fullname", user.getFirstName() + " " + user.getLastName()); editor.putString("firstname", user.getFirstName()); editor.putString("lastname", user.getLastName()); editor.putString("image_loc", "https://graph.facebook.com/" + user.getId() + "/picture?type=large"); editor.putString("user_id", user.asMap().get("email").toString()); editor.putString("email", user.asMap().get("email").toString()); editor.putString("page", "1"); editor.putString("count", "30"); editor.putString("token", ""); editor.commit(); startActivity(new Intent(SplashActivity.this, MainActivity.class)); } } }); } else if (state.isClosed()) { } } } @Override public void onResume() { super.onResume(); uiHelper.onResume(); isResumed = true; } @Override public void onPause() { super.onPause(); uiHelper.onPause(); isResumed = false; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); uiHelper.onActivityResult(requestCode, resultCode, data); } @Override public void onDestroy() { super.onDestroy(); uiHelper.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); uiHelper.onSaveInstanceState(outState); } private Session.StatusCallback callback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { onSessionStateChange(session, state, exception); } }; } 

EDIT: ———————————————–

Esto es lo que he intentado:

  1. Traté de limpiar mi proyecto y el FacebookSDK unas 50 veces.
  2. Quitó el FacebookSDK y lo readded 3 veces.

He intentado todo lo que puedo encontrar en Internet y no puedo averiguar cuál es el problema.

FacebookSdk.sdkInitialize(getApplicationContext());

esto antes de setContentView

  setContentView(R.layout.activity_home); 

Si utiliza Facebook SDK 4.x, observe que cambió el nombre del paquete. Ahora es com.facebook.login.widget.LoginButton

Estaba recibiendo este error porque establecí la vista de contenido ANTES de sdkInitialize. La guía de introducción tiene un comentario referente a esto.

https://developers.facebook.com/docs/android/getting-started#androidstudio

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); // Initialize the SDK before executing any other operations, // especially, if you're using Facebook UI elements. } 

Así que mi código ahora se ve así:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_main); } 

Tuve el mismo error, acabo de limpiar mis proyectos (facebook sdk y proyecto actual) y se resolvió.

Después de añadir Facebook como un módulo que tiene que agregar a sus dependencias en Gradle, agregando la siguiente línea en el bloque de dependencias:

 compile project(':facebook') 

Espero que pueda ayudar.

usted tiene que inicializar el SDK de Facebook antes de setContentView, así que agregue la siguiente línea derecha sobre el setContentView

 FacebookSdk.sdkInitialize(getApplicationContext()); 

La única manera que encontré para arreglar esto era poner el SDK entero en mi proyecto. Ahora funciona. No es la solución preferida, pero funciona.

Tuve el mismo error, incluso cuando traté de ejecutarlo en el emulador.

Mi problema era más relacionado que agregué el Sdk de Facebook a la trayectoria de la estructura en vez de agregar el proyecto en la lengüeta de las características. Recibí la respuesta de otra respuesta stackoverflow

Simplemente inicie FacebookSdk.sdkInitialize (getApplicationContext ()); en su clase de aplicación. Porque la clase de aplicación se inicializa incluso antes de que sus actividades se inicialicen.

haz lo siguiente:

public class ApplicationController extends Aplicación {

 @Override public void onCreate() { super.onCreate(); FacebookSdk.sdkInitialize(getApplicationContext()); } 

}

Una solución es agregar la ruta del SDK de Facebook a "project.properties" en su proyecto.

Me gusta:

 android.library.reference.1=../libfacebook/facebook-android-sdk-3.0.1/facebook 

Tuve también el mismo error y sólo relacing android-support-v4.jar con android-support-v13.jar resuelto el problema.

sólo en caso de que … si alguien todavía lo necesita, limpiar sólo el proyecto de Facebook y, a continuación, agregarlo de nuevo como una biblioteca en su proyecto. Esto resolvió mi problema

He intentado Programatically la creación de instancia de LoginButton programatically como

 LoginButton loginButton = new LoginButton(this); 

y agregó esto a un LinearLayout

  fbLoginButton = (LinearLayout) findViewById(R.id.fb_login_view); fbLoginButton.addView(loginButton); 

Y aquí está la visión de mi layout xml

 <LinearLayout android:layout_width="wrap_content" android:layout_height="40dip" android:id="@+id/fb_login_view" android:layout_centerInParent="true" android:layout_gravity="center_horizontal" android:text="connect_with_facebook"/> 

Esto es ofcourse que sigue la corrección sugerida por la respuesta de @Lalit Kumar Déjeme saber si estoy faltando cualquier cosa.

Si agrega la biblioteca de facebook a su aplicación en Propiedades-> Android, debe eliminar facebook.jar en su ruta / bin / facebook.jar de facebooksdk. Causa error cuando enlace en eclipse. Entonces usted limpia su sdk del facebook y su uso. Espero que funcione bien.

  • Android Facebook SDK 3.0 proporciona "remote_app_id no coincide con el ID almacenado" al iniciar sesión
  • Facebook android sdk 4.0, forma de cancelar el registro de devolución de llamada de LoginManager
  • Android y Facebook SDK: descodificación de imágenes de / me / picture graph call
  • SDK de Android Facebook: errores al importar SDK
  • Facebook Android SDK Sesión openForPublish no crear una nueva sesión
  • La aplicación de Android tiene una marca de exclamación roja en Eclipse después de importar la biblioteca de Facebook
  • Android: Cómo obtener la imagen de usuario de facebook mediante access_token
  • Abrir una página de Facebook desde la aplicación Android?
  • Sube una foto a Facebook con Facebook Android SDK en Android
  • Importar 3 SDKs, obtiene el error: Se han encontrado 3 versiones de android-support-v4.jar
  • Autorización a través de Facebook Aplicación para Android sin SDK de Facebook
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.