2017-05-31 71 views
-1

我想從一個類到另一個無線的WiFi的Scanresults。Android的監視器說:嘗試調用空對象的接口方法'int java.util.List.size()'參考

這是我的第一類:

public class WifiReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context ctx, Intent intent) { 
     // Wenn Hardware scan durchzogen wurde (wegen -->SCAN_RESULTS_AVAILABLE_ACTION) 
     String wifiList1; 
     wifiList = mainWifi.getScanResults(); 
     wifiList1=wifiList.toString(); 
     Toast.makeText(ctx, "Scan für AP Umgebung fertig", Toast.LENGTH_SHORT).show(); 
     Log.v("onReceive","ausgeführt"); 
     Log.v("ScanResults",wifiList1); 
    } 

    public List<ScanResult> getWifiList(){ 
     return wifiList; 
    } 

在這裏,這個是其他類,在這裏我想從getScanResults(),這我在這裏節省wifilist,你可以看到使用我的數據。

public StringBuilder getAParound(){ 

    StringBuilder sb = new StringBuilder(); 

    DemoApp wf2 = new DemoApp(); 
    DemoApp.WifiReceiver wf = wf2.new WifiReceiver(); 

    for (int i = 0; i< wf.getWifiList().size(); i++) { // At this line Android Monitor says Attempt to invoke interface method 'int java.util.List.size()' on a null object reference 
     sb.append(Integer.toString(i + 1) + ". "); 
     sb.append(wf.getWifiList().get(i).toString()); 
     Log.v("getAParound","ausgeführt"); 
    } 
    return sb; 
} 

我可以看到在Log.v("ScanResults",wifiList1);沒有任何問題的結果。

有人可以幫我嗎?

+0

問題是與getWifiList.size();您首先創建一個新的WifiReceiver,並嘗試在未初始化時讀取列表中的數據。你應該在接收數據時讀取數據和/或在WifiReceiver中將''wifiList = new ArrayList()<>;'初始化爲一個字段。這是我可以從你的代碼片段中讀取的。 – aborocz

+0

謝謝你的回答!未初始化意味着什麼?使用wifiList = mainWifi.getScanResults();它沒有完成?我很困惑。你能寫一部分代碼嗎? –

+0

@Okey該行會執行此操作,但尚未調用'onReceive()',所以'wifiList'仍然爲空。 – Andreas

回答

0

我想,你不要實例化wifiList,試着用'new'關鍵詞在構造函數方法中創建列表的一個實例。

這樣的:

public class WifiReceiver extends BroadcastReceiver { 

private List<ScanResult> wifiList; 

// This is a construtcor 
public WifiReceiver(){ 
    wifiList = new List<ScanResult>() // Here you crerate the object 
} 

@Override 
public void onReceive(Context ctx, Intent intent) { 
    // Wenn Hardware scan durchzogen wurde (wegen -->SCAN_RESULTS_AVAILABLE_ACTION) 
    String wifiList1; 
    wifiList = mainWifi.getScanResults(); 
    wifiList1=wifiList.toString(); 
    Toast.makeText(ctx, "Scan für AP Umgebung fertig", Toast.LENGTH_SHORT).show(); 
    Log.v("onReceive","ausgeführt"); 
    Log.v("ScanResults",wifiList1); 
} 

public List<ScanResult> getWifiList(){ 
    return wifiList; 
} 

其是因爲該對象類型defualt值是 '空'

+0

你的意思是?我是編程新手,所以我對這些新手問題很感興趣! –

+0

它的好,我的意思是你的變量'wifiList'沒有收到任何值,至少在你顯示的代碼中,所以你必須做這樣的事情:wifiList = new List (); –

+0

我編輯答案得到更清晰 –

相關問題