2011-09-10 4 views
0

동일한 브로드 캐스트 수신기를 초기화해야하는 두 개의 서로 다른 파일이 있습니다. 결과를 검색하는 데 문제가 있습니다. 어떻게 든 스캔을 시작한 클래스를 제대로 참조 할 수 없기 때문에 null 값이 발생합니다.여러 브로드 캐스트 수신기를 추적하는 방법

다음은 코드 예제입니다.

public void Connection_Logic (Context c) 

    IntentFilter wififilter; 
    wififilter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); 
    public WifiManager wifiManager; 
    wifireceiver = serviceConsume.wifireceiver; 
    c.registerReceiver(wifireceiver, wififilter); 
    wifiManager.startScan(); 
} 

public class serviceConsume { 
    public WifiManager wifiMan; 
    wifiMan = (WifiManager)getBaseContext().getSystemService(Context.WIFI_SERVICE); 
    public BroadcastReceiver wifireceiver = new Wifi_Broadcast(this); 
    IntentFilter wififilter; 
    wififilter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); 
    registerReceiver(wifireceiver, wififilter); 
    wifiMan.startScan(); 
} 

public class Wifi_Broadcast extends BroadcastReceiver { 

    public ServiceConsume main; 
    public Connection_Logic ConnLog; 

    public Wifi_Broadcast(ServiceConsume main) { 
     super(); 
     this.main = main; 
    } 

    public Wifi_Broadcast(Connection_Logic ConnLog) { 
     super(); 
     this.ConnLog = ConnLog; 
    } 

    @Override 
    public void onReceive(Context c, Intent intent) { 

     if(main != null) { 
      List<ScanResults> results = ConnLog.wifiManager.getScanResults(); 
     } else if (ConnLog != null) { 
      List<ScanResults> results = ConnLog.wifiMan.getScanResults(); 
     } 
    } 
} 

결과에 대해 null 값을 얻는 이유는 누구입니까? 내가 잘못 했니? 누군가이 작업에 대한 코드 예제를 가지고 있다면, 고맙겠습니다.

감사합니다. 에서

답변

0
if(main != null) { 
      List<ScanResults> results = ConnLog.wifiManager.getScanResults(); 
     } else if (ConnLog != null) { 
      List<ScanResults> results = main.wifiMan.getScanResults(); 
     } 

당신의 else if 당신이 주요 사용하지만, 주요 널 .. 어쩌면 그것은 다음과 같이해야합니다

if(main != null) { 
       List<ScanResults> results = main.wifiMan.getScanResults(); 
      } else if (ConnLog != null) { 
       List<ScanResults> results = ConnLog.wifiManager.getScanResults(); 
      } 
+0

감사 핀, 즉 실제로 오타했다. 하지만 수신기를 너무 빨리 폴링하는 것과 관련된 문제를 발견했습니다. 너무 빨리 폴링하면 수신자가 더 이상 등록되지 않아 널값이됩니다. 도움에 감사 드리며 논리에 문제가 없다는 사실을 알고 기쁩니다. 감사! – Dave

+0

@Dave - 폴링을 어떻게 신속하게 중지 했습니까? –

관련 문제