我有這個代碼的問題,它接縫,它是異步工作,它返回false,但爲時已晚,因爲if語句中的代碼在onReceve中檢查完成之前接縫運行。異步問題
如何使onReceve中的檢查完成第一個然後運行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
}
已經回答了許多很多類似的問題:通過在'onReceive'中放置'if'' – Selvin
我試過了,但是如果需要在不同的地方運行代碼才能正常工作 – shotofop
我是很確定你的代碼甚至不會編譯,因爲你有一個內部類改變局部變量,局部變量需要是最終的,如果它們被內部類使用(包括lambda表達式,但這不是重點)。你可能已經通過將'flag'聲明爲一個類字段來避開它,但是你不會繞過這個要求,就是你需要從'onReceive'方法的某個地方調用與該標誌有關的代碼。 –