7
votes

Obtenir 'BadtokenException: Impossible d'ajouter de la fenêtre' Lorsque vous essayez d'afficher la boîte de dialogue Facebook - Android

Je reçois une mauvaise exception de jeton lorsque vous essayez de montrer la publication sur la boîte de dialogue MURAL à partir du SDK Facebook (cela se produit toutes les 2 fois, je gère l'application).

J'ai un bouton "Publier" et son travail est de montrer la boîte de dialogue si l'utilisateur est connecté à son compte FB ou affichez la boîte de dialogue de connexion (puis affiche immédiatement la boîte de dialogue "Publier sur le mur") si l'utilisateur n'est pas connecté à son compte. P>

Voici l'auditeur de clics sur le bouton Publish - P>

 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)


2 commentaires

BadTokenException a presque toujours à voir avec le contexte vous le transmettez. Quel est votre ce pointeur ?


C'est le contexte d'activité, pas l'application. Si j'avais utilisé le contexte de l'application, une erreur différente apparaît. Ce n'est pas le cas.


4 Réponses :


0
votes

On dirait que vous avez fourni une méthode avec un objet context / activité qui n'est plus actif. Probablement dans la méthode postonwall. Est le ceci dans cette méthode l'activité actuellement affichée?


1 commentaires

Oui, c'est le contexte de l'activité, pas l'application. Je pourrais aussi bien écrire là-bas [Nom d'activité] .C'est. Je sais que cela pourrait être un problème, mais je n'utilise pas le contexte de l'application, donc ce n'est pas le cas ici.



0
votes

face au même problème. Pour autant que je sache, de googling, c'est à voir avec votre activité parfois forte> ne pas être prêt lorsque l'activité de connexion Facebook renvoie son résultat. Pourquoi? Aucun indice.

mais i pense que cela fonctionnera mieux: définissez un drapeau dans votre classe, définissez le drapeau dans l'authentifier et affichez l'alerte dans l'indicateur OnStart si le drapeau est défini. Ensuite, vous serez certainement dans le confort de votre propre activité: p> xxx pré>

... p> xxx pré>

... P>

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


0 commentaires

8
votes
@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();
}

0 commentaires

1
votes

Et bien sûr, il existe le cas où le code tel que xxx pré>

est couru à l'intérieur d'une classe dérivée de groupe d'activités - comme dans le cas de la commutation entre de nombreuses activités sous une seule onglet d'une activité à onglets . Assurez-vous que le 'Ceci' dans P>

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


0 commentaires