Java观察者问题
我在Android平台上用Java实现自己的observer时遇到了一些问题 我创建了一个名为NetworkPathJni的类,它使用名为NetworkPathJniObserver的观察者接口类通知其他对象更改 以下是NetworkPathJni.java的代码Java观察者问题,java,android,observer-pattern,Java,Android,Observer Pattern,我在Android平台上用Java实现自己的observer时遇到了一些问题 我创建了一个名为NetworkPathJni的类,它使用名为NetworkPathJniObserver的观察者接口类通知其他对象更改 以下是NetworkPathJni.java的代码 这是观察员的代码 观察者在名为SipNetworkPath的类中实现如下 SipNetworkPath的实例如下所示 日志显示创建了NetworkPathJni和SipNetworkPath,并调用了NetworkPa
这是观察员的代码
观察者在名为SipNetworkPath的类中实现如下
SipNetworkPath的实例如下所示
日志显示创建了NetworkPathJni和SipNetworkPath,并调用了NetworkPathStateChanged(int-aaAvailabilityState) 在该方法中,所有日志记录都会返回,但该方法不会在观察器中调用,当我在日志记录中询问“SipNetworkPath是否处于活动状态?”时,我会得到false
observer类是否丢失了引用或其他内容,或者我这样做的方式有错误?在方法
NetworkPathStateChanged
中,您没有对可用性状态执行任何操作。通常您会将其存储在内部,如下所示:
private TAvailabilityState availablilityState = null; // or a more suiteable initial value
@Override
public void NetworkPathStateChanged(TAvailabilityState availabilityState) {
this.availabilityState = availabilityState;
Log.d("SipNetworkPath", "SipNetworkPath - Do networkpathstate changed!");
}
然后,在方法isAlive
中,您将根据状态进行响应:
@Override
public boolean isAlive() {
return availabilityState == TAvailabilityState.ALIVE; // <-- this is just a guess, I don't know this class or enum.
}
@覆盖
公共生活{
return availabilityState==taavailabilityState.ALIVE;//这是相当多的代码,你能提供一个较小的示例吗?如果我可以复制和粘贴这些垃圾代码,这会更容易。我还看不到错误,但在IDE的帮助下应该很容易找到。顺便问一下,那怎么会返回false:public boolean isAlive(){return true;}我不确定我能把它简化到什么程度。在我看来,它并不是一段庞大的代码。这正是我的问题,为什么它会返回false??这与对象失去引用或被垃圾收集器收集有关吗?如果你问这样的问题,这正是你的问题:“为什么return true返回false”并且我不必搜索整个代码中的错误-如果return true不返回true,那么除了程序逻辑之外,其他东西都会被破坏。如果您尝试提供一个关于这个问题的简短示例(),您可能会发现这可能与您自己的观察者模式无关。感谢Andreas,但这不是问题所在,问题在于NetworkPathStateChanged方法在被调用时从未运行过。与isAlive方法相同,它在被调用时似乎没有运行,因为它应该简单地返回true,但我t实际上返回false。如果这是正确的答案,也许您可以告诉我们哪里出了问题。创建了两个观察器实例,导致第二个实例的空方法覆盖了第一个实例。
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;
}
public class WifiNetworkPath extends SipNetworkPath{
public WifiNetworkPath(NetworkPathObserverInterface aObserver) {
super(aObserver);
}
private TAvailabilityState availablilityState = null; // or a more suiteable initial value
@Override
public void NetworkPathStateChanged(TAvailabilityState availabilityState) {
this.availabilityState = availabilityState;
Log.d("SipNetworkPath", "SipNetworkPath - Do networkpathstate changed!");
}
@Override
public boolean isAlive() {
return availabilityState == TAvailabilityState.ALIVE; // <-- this is just a guess, I don't know this class or enum.
}