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.

  • Cómo hacer una lista de feeds del libro de la cara en el formato de línea de tiempo
  • Autenticación entre la aplicación de Android y el servicio web + facebook login
  • Facebook sdk, androide, pared, poste, línea, rotura
  • Facebook Compartiendo con el estudio de Android
  • Autenticación de Facebook sin botón de inicio de sesión
  • 'URL del enlace de la aplicación que falta' en la invitación de la aplicación de Facebook
  • No puedes encontrar contactos de Facebook en RawContacts
  • Excepción al iniciar sesión con Simple API de Facebook (Sesión: se ha intentado abrir una sesión que tiene una solicitud pendiente)
  • cómo manejar el botón de nuevo cuando llamamos a facebook o twitter de la clase Fragment?
  • ¿Cómo detectar un evento de cierre de sesión con la API de Android de Facebook v4?
  • Android: API de Facebook para publicar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.