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
}
déjà répondu à beaucoup, beaucoup de questions similaires: en mettant 'if' dans' onReceive' – Selvin
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
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'. –