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:
- La devolución de llamada de Facebook SDK 3.0 se dispara dos veces
- Cómo obtener fotos de amigos usando facebook-android-SDK
- LikeView Callback
- Facebook Publicar en tu nombre no funciona en android facebook sdk 3.0.2
- Autorización para Android Facebook SDK 3.0
<?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:
- Traté de limpiar mi proyecto y el FacebookSDK unas 50 veces.
- 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.
- Error de Facebook en Android "Error de inicio de sesión: com.facebook.android.DialogError: La conexión con el servidor no tuvo éxito"
- El inicio de sesión de Android facebook no funciona con la aplicación de Facebook instalada
- ¿Cuándo solicitar permisos con el nuevo Android SDK 3.0 de Facebook?
- El hash de clave de Facebook no coincide con ningún hash de clave almacenado
- ¿Cómo detectar un evento de cierre de sesión con la API de Android de Facebook v4?
- Facebook Android SDK 4.0: newGraphPathRequest devuelve "Un token de acceso activo debe utilizarse para consultar información sobre el usuario actual."
- Clics de Facebook SDK 4.7.0 ClassNotFoundException para AppEventsLogger
- Iniciar sesión con permiso adicional con Facebook SDK 3 para Android
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.
- ¿Cómo cambiar de forma programática el contraste de un mapa de bits en android?
- los elementos del lugar de visualización de la cuadrícula de Android de derecha a izquierda