У меня возникли проблемы с реализацией собственного обозревателя в Java на платформе Android.
Я создал вызов класса NetworkPathJni, который использует интерфейсный класс Observer под названием NetworkPathJniObserver для уведомления других объектов об изменениях.
Вот код для NetworkPathJni.java
public class NetworkPathJni {
NetworkPathJniObserver networkPathJniObserver;
public NetworkPathJni(NetworkPathJniObserver aObserver){
networkPathJniObserver = aObserver;
Log.d("Phone", "NetworkPathJni Created" );
}
public void NetworkPathStateChanged(int aAvailabilityState){
Log.d("Phone", "NetworkPathStateChanged new state = " + aAvailabilityState );
TAvailabilityState availabilityState = intToAvailability(aAvailabilityState);
Log.d("Phone", "Is SipNetworkPath alive?" + networkPathJniObserver.isAlive());
networkPathJniObserver.NetworkPathStateChanged(availabilityState);
Log.d("Phone", "NetworkPathStateChanged end" );
Log.d("Phone", "Is SipNetworkPath alive? (2)" + networkPathJniObserver.isAlive());
}
А вот код для наблюдателя
public interface NetworkPathJniObserver {
void NetworkPathStateChanged(TAvailabilityState aAvailabilityState);
boolean isAlive();
}
Наблюдатель реализован следующим образом в классе под названием SipNetworkPath
public class SipNetworkPath implements NetworkPathInterface, NetworkPathJniObserver{
NetworkPathObserverInterface observer;
NetworkPathJni networkPathJni;
public SipNetworkPath(NetworkPathObserverInterface aObserver){
domainType = aDomainType;
observer = aObserver;
networkPathJni = new NetworkPathJni(this);
Log.d("Phone", "SipNetworkPath created" );
}
//NetworkPathJniObserver
@Override
public void NetworkPathStateChanged(TAvailabilityState availabilityState) {
Log.d("SipNetworkPath", "SipNetworkPath - Do networkpathstate changed!");
}
@Override
public boolean isAlive() {
return true;
}
И SipNetworkPath создается следующим образом
public class WifiNetworkPath extends SipNetworkPath{
public WifiNetworkPath(NetworkPathObserverInterface aObserver) {
super(aObserver);
}
Ведение журнала показывает, что и NetworkPathJni, и SipNetworkPath создаются, и вызывается NetworkPathStateChanged (int aAvailabilityState).
Внутри этого метода все журналирование возвращается, но метод не вызывается в обозревателе, и я получаю ложь, когда спрашиваю: "SipNetworkPath жив?" в журнале.
Класс наблюдателей теряет ссылку или что-то в этом роде или в моем способе есть ошибка?