Cómo obtener 'BadTokenException: No se puede agregar ventana' al intentar mostrar el diálogo de Facebook – Android

Estoy recibiendo una Excepción de Token Malo al intentar mostrar el diálogo publicar en la pared desde el SDK de Facebook (Sucede cada 2 veces que ejecuto la aplicación).

Tengo un botón 'publicar', y su trabajo es mostrar el diálogo si el usuario está conectado a su cuenta FB, o mostrar el cuadro de diálogo de inicio de sesión (y luego mostrar inmediatamente el cuadro de diálogo 'publicar en la pared') si el usuario no está ' T inició sesión en su cuenta.

Aquí está el oyente de clic del botón Publicar –

mPostButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { if(mLoginButton.getVisibility() == 0) postOnWall(); else mLoginButton.performClick(); } }); 

Aquí está el oyente onAuthSucceed ()

 public void onAuthSucceed() { postOnWall(); } 

Aquí está la función PostOnWall (que muestra el diálogo de publicación)

  public void postOnWall() { Bundle params = new Bundle(); params.putString("name", FBname); params.putString("link", FBlink); params.putString("description", FBdescription); params.putString("picture", FBpicture); con = this; mFacebook.dialog(con, "feed", params, new SampleDialogListener()); } 

Aquí está el registro del error –

  05-05 16:25:09.601: WARN/WindowManager(109): Attempted to add application window with unknown token HistoryRecord{405416b0 android.alco/.do_drive}. Aborting. 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@405db9f8 is not valid; is your activity running? 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.view.ViewRoot.setView(ViewRoot.java:527) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.view.Window$LocalWindowManager.addView(Window.java:424) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.app.Dialog.show(Dialog.java:241) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at com.facebook.android.Facebook.dialog(Facebook.java:622) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.alco.do_drive.postOnWall(do_drive.java:258) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.alco.do_drive$SampleAuthListener.onAuthSucceed(do_drive.java:172) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.alco.SessionEvents.onLoginSuccess(SessionEvents.java:78) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at android.alco.LoginButton$LoginDialogListener.onComplete(LoginButton.java:100) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at com.facebook.android.Facebook$1.onComplete(Facebook.java:308) 05-05 16:25:27.292: ERROR/AndroidRuntime(20089): at com.facebook.android.FbDialog$FbWebViewClient.shouldOverrideUrlLoading(FbDialog.java:133) 

He buscado por todas partes y no puedo encontrar una solución.

EDITAR – Esto sólo ocurre cuando el usuario no está conectado. En ese caso, presiona el botón 'publicar', inicia sesión y luego se llama a la función 'postOnWall', lo que genera el error. Estoy trabajando en él por 2 días ahora, y no pude encontrar nada al respecto.

¡Gracias!

4 Solutions collect form web for “Cómo obtener 'BadTokenException: No se puede agregar ventana' al intentar mostrar el diálogo de Facebook – Android”

 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.d("Facebook-WebView", "Webview loading URL: " + url); super.onPageStarted(view, url, favicon); if(FbDialog.this.isShowing()) mSpinner.show(); } 

Y por supuesto hay el caso donde el código tal como

 View view = getLocalActivityManager().startActivity(id, intent).getDecorView(); setContentView(view); 

Se ejecuta dentro de una clase derivada de ActivityGroup, como en el caso de cambiar entre muchas actividades bajo una sola pestaña de una actividad tabulada. Asegúrese de que el 'esto' en

 AlertDialog.Builder builder = new AlertDialog.Builder(WhateverActivity.this); 

Es reemplazado por una referencia apropiada al padre de WhateverActivity como

 AlertDialog.Builder builder = new AlertDialog.Builder(ActivityGroupDerivedParentOfWhateverActivity.this); 

Parece que has proporcionado algún método con un objeto de contexto / actividad que ya no está activo. Probablemente en el método postOnWall. ¿Es this en ese método la actividad actualmente mostrada?

Frente a la misma cuestión. Por lo que puedo decir, de google, es para hacer con su actividad a veces no estar listo cuando la actividad de inicio de sesión de Facebook devuelve su resultado. ¿Por qué? Ninguna pista.

Pero creo que esto funcionará mejor: Defina un indicador en su clase, establezca el indicador en AuthListener y muestre la alerta en el indicador onStart si está establecido. Entonces estarás seguramente en la comodidad de tu propia actividad:

 private boolean authSuccess = false; 

 public class SampleAuthListener implements AuthListener { authSuccess = true; 

 protected void onStart() { super.onStart(); if (authSuccess) { alert.show(); } } 

Exención de responsabilidad: Tengo muy poca experiencia de Java / Android.

  • Android FaceBook nuevoMyFriendsRequest devuelve EMPTY lista de amigos
  • Deep linking en Android no inicia la aplicación y redirige a Android market market
  • Cómo utilizar el token de acceso de Facebook en la vista de la aplicación de Android
  • Práctica recomendada para la autorización / acción de Facebook en dispositivos móviles sin complementos
  • Android: ¿Cuál es la clase de diálogo compartido en Facebook SDK 4.x
  • Publicar datos de imágenes sin procesar en lugar de URL con Android Facebook SDK
  • Obtener foto de perfil de facebook y establecer en imageview
  • ¿Por qué el ID de aplicación de Facebook de repente se convierte en no válido?
  • Prueba de Android con Robolectric: no reconoce SDK de Facebook
  • Compartir con intento de facebook en android
  • Publicar en el muro de Facebook del usuario no funciona cuando se instala la aplicación de Facebook en el dispositivo / emulador
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.