2017-10-04 5 views
-3

J'ai un problème avec ce code il semble qu'il fonctionne async et il renvoie false mais trop tard parce que le code dans l'instruction if doit être exécuté avant que la vérification soit terminée dans onReceve.Problème avec async

Comment puis-je faire en sorte que le chèque d'arrivée soit fini et ensuite exécuter le code dans l'instruction if?

class WifiReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context c, Intent intent) { 
     String action = intent.getAction(); 
     if(action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)){ 
      Log.d("WifiReceiver", ">>>>SUPPLICANT_STATE_CHANGED_ACTION<<<<<<"); 
      int supl_error=intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, -1); 
      if(supl_error==WifiManager.ERROR_AUTHENTICATING){ 
       Log.i("ERROR_AUTHENTICATING", "ERROR_AUTHENTICATING!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); 
       flag = false; 
      } 
      else { 
       flag = true; 
      } 
     } 
    } 
} 

if(flag){ 
//do something 
} 
+0

déjà répondu à beaucoup, beaucoup de questions similaires: en mettant 'if' dans' onReceive' – Selvin

+0

j'ai essayé cela, mais le code dans le si doit être exécuté dans un endroit différent pour que l'application fonctionne correctement – shotofop

+0

Je suis assez sûr que votre code ne compilera même pas, parce que vous avez une variable interne changeant de classe interne, et les variables locales doivent être finales si elles sont utilisées par des classes internes (y compris lambdas, mais c'est à côté du point). Vous l'avez peut-être contourné en déclarant 'flag' comme un champ de classe, mais vous ne pourrez pas contourner l'exigence que votre code concerné par le drapeau doive être appelé depuis quelque part dans la méthode' onReceive'. –

Répondre

1

Vous placez le code que vous voulez appeler après la Async se termine en une méthode et appeler la méthode onReceive().

+0

je pense que onReceive() fait async je n'ai pas de code asynchrone je veux juste l'instruction if pour attendre la vérification dans le onReceve ( – shotofop

+0

Oui. L'appel 'onRecieve' est le point d'ancrage qui vous permet de savoir qu'il s'est terminé correctement. C'est là que vous appelez le code que vous voulez déclencher après. Essayez-le! –

+0

Si le code que vous utilisez nécessite des paramètres renvoyés par 'onRecieve', vous devez l'appeler à partir de là. –