2012-03-31 2 views
0

У меня есть список слушателей. Когда произойдет событие, я хочу запустить бросок списка и отправить всем им сообщение. от какой-то причины следующего код не работает:андроид связанных слушателей

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");   
} 

Редакции: хорошо я нашел мою проблему ... этого класса расширяет BroadcastReceiver. и список находится внутри этого класса. eveytime, состояние Интернета изменяется, оно делает новый экземпляр этого класса, а слушатели, которые зарегистрированы, недоступны для этого экземпляра .. какая оболочка я делаю?

+0

Пожалуйста, будьте более конкретными. Что значит «не работает»? – jpm

+0

Я отредактировал и добавил свою активность .. по какой-то причине его теперь отправляет состояние слушателю, хотя я знаю, что он получил его, потому что, когда я регистрирую слушателя, ответ функции функции registerListener с некоторым текстом, который я вижу в activity .. –

+0

Я думаю, что я, возможно, все поймал бы список в списке правильно. –

ответ

0

Вы не должны регистрировать слушателей из зарегистрированного манифеста BroadcastReceiver. Как вы заметили, этот объект немедленно уничтожается после возвращения onReceive(). Явно зарегистрированный BroadcastReceiver не может сам делать ничего, что длится до конца onReceive().

+0

Так что нужно использовать 'Сервис', или данные могут быть сохранены и вызваны с помощью' sqlite', чтобы избежать постоянно работающего 'Service' , – Jakar

+0

Я не понимаю, в одной руке андроид дает мне возможность изменять систему, как только изменяется состояние Интернета, а с другой стороны я не могу сделать обработчик событий для этого изменения? –

+0

@AsafNevo: Я не знаю, что вы думаете, «как только изменилось состояние Интернета». Вы также отказались указать, почему, по вашему мнению, вам нужен список слушателей, связанных с приложениями. Вы можете слушать трансляции, такие как 'CONNECTIVITY_ACTION'. Обычно вы не делаете этого из зарегистрированного манифеста «BroadcastReceiver», который, как представляется, является тем, что вы делаете. Поскольку вы не объяснили, что именно вы пытаетесь сделать, тем не менее, трудно предоставить вам много конкретных советов. – CommonsWare

Смежные вопросы