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)
4 Réponses :
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 code> dans cette méthode l'activité actuellement affichée? P>
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.
face au même problème. Pour autant que je sache, de googling, c'est à voir avec votre activité 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> ... p> ... P> protected void onStart() {
super.onStart();
if (authSuccess) {
alert.show();
}
}
@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(); }
Et bien sûr, il existe le cas où le code tel que 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);
BadTokenException CODE> a presque toujours à voir avec le contexte code> code> vous le transmettez. Quel est votre
ce pointeur code>?
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.