2017-10-04 175 views
-3

我有這個代碼的問題,它接縫,它是異步工​​作,它返回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 
} 
+0

已經回答了許多很多類似的問題:通過在'onReceive'中放置'if'' – Selvin

+0

我試過了,但是如果需要在不同的地方運行代碼才能正常工作 – shotofop

+0

我是很確定你的代碼甚至不會編譯,因爲你有一個內部類改變局部變量,局部變量需要是最終的,如果它們被內部類使用(包括lambda表達式,但這不是重點)。你可能已經通過將'flag'聲明爲一個類字段來避開它,但是你不會繞過這個要求,就是你需要從'onReceive'方法的某個地方調用與該標誌有關的代碼。 –

回答

1

你把你要撥打的異步完成到一個方法後調用該方法在onReceive()代碼。

+0

我認爲onReceive()做異步我沒有任何異步代碼我只是想要if語句等待onReceve中的檢查( ) – shotofop

+0

是的。 'onRecieve'調用是讓你知道它已經正確完成的鉤子。這就是您調用之後要觸發的代碼的地方。嘗試一下! –

+0

如果你正在運行的代碼需要'onRecieve'返回的參數,那麼你需要從那裏調用它。 –