Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java观察者问题_Java_Android_Observer Pattern - Fatal编程技术网

Java观察者问题

Java观察者问题,java,android,observer-pattern,Java,Android,Observer Pattern,我在Android平台上用Java实现自己的observer时遇到了一些问题 我创建了一个名为NetworkPathJni的类,它使用名为NetworkPathJniObserver的观察者接口类通知其他对象更改 以下是NetworkPathJni.java的代码 这是观察员的代码 观察者在名为SipNetworkPath的类中实现如下 SipNetworkPath的实例如下所示 日志显示创建了NetworkPathJni和SipNetworkPath,并调用了NetworkPa

我在Android平台上用Java实现自己的observer时遇到了一些问题

我创建了一个名为NetworkPathJni的类,它使用名为NetworkPathJniObserver的观察者接口类通知其他对象更改

以下是NetworkPathJni.java的代码



这是观察员的代码



观察者在名为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.  
}