2012-03-31 53 views
0

我有一個聽衆列表。 當一個事件發生時,我想運行拋出列表併發送所有消息。 從某些原因,下面的代碼無法正常工作:android鏈接的聽衆列表

private List<Listener> internetListeners = new ArrayList<Listener>(); 
private Iterator<Listener> it; 

public void updateInternetListeners(boolean state) 
{  
    Listener listener; 
    it = internetListeners.iterator(); 
    if (state) 
     Log.d("Listener", "updating true"); 
    else 
     Log.d("Listener", "updating false"); 
    while (it.hasNext()) 
    { 
     listener = (Listener)it.next(); 
     listener.onInternetStateChange(state); 
    } 
} 

我的活動監聽:

@Override 
public void onInternetStateChange(boolean state) { 
    if (state) 
     text.setText("Internet is On"); 
    else 
     text.setText("Internet is Off");   
} 

編輯: 好吧,我發現我的問題......這 類擴展廣播接收器。並且該列表在這個類中。 eveytime互聯網狀態發生了變化,它創建了這個類的一個新實例,並且已註冊的監聽器不能用於此實例。我在做什麼shell?

+0

請更具體。你是什​​麼意思「不起作用?」 – jpm 2012-03-31 20:30:55

+0

我編輯並添加了我的活動..從某種原因它現在發送狀態到監聽器,但我知道它得到它寫,因爲當我註冊監聽器時,registerListener函數響應一些文本,我看到活動.. – 2012-03-31 20:34:05

+0

我想我可能會做整個去正確地拋出清單.. – 2012-03-31 20:34:32

回答

0

您不應該註冊來自清單註冊BroadcastReceiver的偵聽器。正如你注意到的,這個對象在onReceive()返回時立即被銷燬。清單註冊的BroadcastReceiver本身不能做任何超出onReceive()結尾的事情。

+0

因此,應該使用'服務',或數據可以通過'sqlite'存儲和調用,以避免始終運行'服務' 。 – Jakar 2012-03-31 21:49:52

+0

我不明白,一方面,android給了我係統在互聯網狀態改變後立即被修改的能力,另一方面我不能爲這個改變做一個事件處理程序? – 2012-03-31 22:05:18

+0

@AsafNevo:當互聯網狀態改變時,我不知道你的想法是什麼。你也拒絕透露爲什麼你認爲你需要一個特定於應用程序的監聽器列表。歡迎您收聽像'CONNECTIVITY_ACTION'這樣的廣播節目。通常情況下,你不會從清單註冊的'BroadcastReceiver'這樣做,這似乎是你在做什麼。既然你沒有解釋你想要做什麼,但是很難給你提供很多具體的建議。 – CommonsWare 2012-03-31 22:18:32