142 votes

Impossible d'ajouter une fenêtre -- le jeton Android.os.BinderProxy n'est pas valide ; votre activité est-elle en cours d'exécution ?

J'essaie de me connecter à Facebook via l'API Facebook, en suivant cet exemple : https://github.com/facebook/facebook-Android-sdk/tree/master/examples/simple

Tout va bien, mais lorsque j'essaie d'éditer du code, je veux afficher le message du dialogue après la réussite de la connexion comme ceci :

public void onAuthSucceed() {
        mText.setText("You have logged in! ");   
        //This is the code to call the post message dialog.                     
        mFacebook.dialog(Example.this, "feed",new SampleDialogListener());   
    }

Je reçois cette erreur dans le logcat :

03-02 13:32:08.629: E/AndroidRuntime(14991): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@405180f8 is not valid; is your activity running?
03-02 13:32:08.629: E/AndroidRuntime(14991):    at android.view.ViewRoot.setView(ViewRoot.java:532)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at android.view.Window$LocalWindowManager.addView(Window.java:424)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at android.app.Dialog.show(Dialog.java:241)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at com.facebook.android.Facebook.dialog(Facebook.java:780)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at com.facebook.android.Facebook.dialog(Facebook.java:737)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at com.facebook.android.Example$SampleAuthListener.onAuthSucceed(Example.java:113)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at com.facebook.android.SessionEvents.onLoginSuccess(SessionEvents.java:78)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at com.facebook.android.Example$LoginDialogListener.onComplete(Example.java:88)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at com.facebook.android.Facebook$1.onComplete(Facebook.java:320)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at com.facebook.android.FbDialog$FbWebViewClient.shouldOverrideUrlLoading(FbDialog.java:144)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:218)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:337)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at android.os.Looper.loop(Looper.java:130)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at android.app.ActivityThread.main(ActivityThread.java:3687)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at java.lang.reflect.Method.invokeNative(Native Method)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at java.lang.reflect.Method.invoke(Method.java:507)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
03-02 13:32:08.629: E/AndroidRuntime(14991):    at dalvik.system.NativeStart.main(Native Method)

Une idée ?

0voto

DrApps Points 11

Il suffit de déplacer le code du dialogue dans le fil de discussion de l'interface utilisateur comme suit :

runOnUiThread{
// your dialog code or function
}

0voto

Problème

dialog.show() ; // Une erreur se produit ici...

Solution

private void Dialog(){
    if(!isFinishing()) { //by checking the activity is finished. We can solve this issue....
        dialog = new ProgressDialog(YourActivity.this);
        dialog.setMessage("Loading...");
        dialog.setCancelable(false);
        dialog.show(); 
    }
}

0voto

Isaac Sichangi Points 19

Vérifie que l'activité se termine et qu'elle n'est pas nulle avant d'afficher la boîte de dialogue.

if(activity != null && !activity.isFinishing()) {

//afficher le dialogue ici

}

-1voto

Dasser Basyouni Points 1108

Pour moi, le problème a été résolu en supprimant simplement le static dans les méthodes de DialogHelper.class (responsable de la création et du masquage du dialogue), car j'ai des propriétés liées à Window dans ces méthodes

-1voto

Il convient de vérifier si l'activité se termine avant d'afficher l'alerte. Pour ce faire, il faut isFinishing() est définie dans la classe Activity.

Voici ce que vous devez faire :

if(!isFinishing())
 {
     alert.show();
 }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X