2017-10-04 19 views
-3

私はこのコードに問題があります。これは、非同期で動作しており、ifReceveでチェックが完了する前にifステートメントのコードが実行されるため、falseを返します。非同期でのトラブル

どのようにして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

すでに多くの類似した質問があります: 'if'を' onReceive'の中に入れてください。 – Selvin

+0

私はそれを試しましたが、ifのコードは別の場所で実行する必要があります。 – shotofop

+0

私はローカル変数を変更する内部クラスがあり、ローカル変数が内部クラス(ラムダを含むが、それはそのポイントの横にある)によって使用される場合、ローカル変数は最終的なものでなければならないので、あなたのコードはコンパイルされません。あなたはクラスフィールドとして 'flag'を宣言することでその周りにいるかもしれませんが、' onReceive'メソッドのどこかからフラグに関連するコードを呼び出す必要があるという要件から回避することはできません。 –

答えて

1

あなたは非同期メソッドに完了した後に呼び出し、onReceive()でメソッドをコールするコードを置きます。

+0

私はonReceive()が非同期を行っていると思います。私はちょうどif文がonReceve ) – shotofop

+0

はい。 'onRecieve'コールは、正しく完了したことを知らせるフックです。これで、後でトリガーするコードを呼び出します。それを試してみてください! –

+0

実行しているコードに 'onRecieve'によって返されたパラメータが必要な場合は、そこから呼び出す必要があります。 –

関連する問題