2017-10-04 11 views
-3

onReceve에서 검사가 완료되기 전에 if 문에서 코드가 실행되기 때문에 비동기로 작동하고 있음을 나타내는이 코드에 문제가 있습니다.비동기에 문제가 발생했습니다.

어떻게하면 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

if를 시도했지만 if의 코드가 제대로 작동하기 위해 다른 장소에서 실행해야합니다. – shotofop

+0

저는 로컬 변수를 변경하는 내부 클래스가 있고 코드가 내부 클래스 (람다를 포함하지만 점 옆에있는)에서 사용되는 경우 로컬 변수가 최종 변수 여야하므로 코드가 컴파일되지 않을 것입니다. 'flag'를 클래스 필드로 선언함으로써 주위를 둘러 보았을 지 모르지만, 플래그와 관련된 코드가'onReceive' 메소드의 어딘가에서 호출되어야한다는 요구 사항을 피할 수는 없습니다. –

답변

1

당신은 당신이 비동기이 방법으로 완료된 후 전화 onReceive()의 메소드를 호출 할 코드를 넣습니다.

+0

onReceive()가 비동기를 수행하고 있다고 생각합니다. 비동기 코드가 없습니다. if 문이 onReceve에서 검사를 기다리고 싶습니다. () – shotofop

+0

예. 'onRecieve'호출은 올바르게 완료되었음을 알리는 고리입니다. 그것이 나중에 트리거 할 코드라고 부릅니다. 시도 해봐! –

+0

실행중인 코드가 'onRecieve'에 의해 반환 된 매개 변수를 필요로하면 거기에서 호출해야합니다. –