私はこのコードに問題があります。これは、非同期で動作しており、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
}
すでに多くの類似した質問があります: 'if'を' onReceive'の中に入れてください。 – Selvin
私はそれを試しましたが、ifのコードは別の場所で実行する必要があります。 – shotofop
私はローカル変数を変更する内部クラスがあり、ローカル変数が内部クラス(ラムダを含むが、それはそのポイントの横にある)によって使用される場合、ローカル変数は最終的なものでなければならないので、あなたのコードはコンパイルされません。あなたはクラスフィールドとして 'flag'を宣言することでその周りにいるかもしれませんが、' onReceive'メソッドのどこかからフラグに関連するコードを呼び出す必要があるという要件から回避することはできません。 –