簡體   English   中英

在這種情況下可以使用Java Observer和Observable嗎?

[英]Can Java Observer and Observable be used in this case?

我有一個Android應用程序,我將使用Java ObserverObservable類來實現Observer模式來監聽要更改的變量。 我已將問題簡化為可編譯的Java項目。

擴展Observable

import java.util.Observable;

public class ServerResponse extends Observable {

    String request;
    String response;

    public ServerResponse() {}

    public ServerResponse(String reqquest) {
        //Process HTTP request here.
        //Notify observers that response has changed.
        response = "Sample HTTP response from server goes here.";
        setResponse(response);
    }

    public String getResponse() {
        return response;
    }

    public void setResponse(String response) {
        this.response = response;
        setChanged();
        notifyObservers(response);
    }
}

實現Observer

import java.util.Observable;
import java.util.Observer;

public class UserProfileActivity implements Observer {

    public static void main (String[] args) {
        System.out.println("Adding UserProfileActivity as an observer.");
        ServerResponse server = new ServerResponse();
        UserProfileActivity observer = new UserProfileActivity();
        server.addObserver(observer);
    }

    @Override
    public void update(Observable o, Object arg) {
       System.out.println("Response obtained from server: " + o.toString());
    }

}

我遇到的問題是當我嘗試在ServerResonse.java調用setResponse時,觀察者不會被通知...但是當我在UserProfileActivity.java調用setResponse時,觀察者能夠獲得通知。 這種行為不是我的預期。

我想要的預期行為是ServerResponse類是在從Web服務器收到響應后調用setResponse (這全部在ServerResponse處理)。

我是否誤解了Java的ObserverObservable類? 我很困惑,為什么Observer能夠在ServerResponse調用setResponse ,如果Observer是應該收到通知的那個。 對我來說似乎有些倒退。

我將挑選代碼:

public ServerResponse(String reqquest) {
    //Process HTTP request here.
    //Notify observers that response has changed.
    response = "Sample HTTP response from server goes here.";
    setResponse(response);
}

這將永遠不會產生預期的效果。 你剛剛構建了一個新的Response類,沒有人在任何地方都有這樣的引用。 所以通知任何人都沒有意義,因為沒有人能夠注冊。

public static void main (String[] args) {
    System.out.println("Adding UserProfileActivity as an observer.");
    ServerResponse server = new ServerResponse();
    UserProfileActivity observer = new UserProfileActivity();
    server.addObserver(observer);
}

在這里,您將向server添加一個觀察者。 然后,線程結束,程序退出。

添加這樣的東西來實際獲得更新:

     for(int i = 0; i < 10; i++) {
         server.setResponse("New response " + i);
         Thread.sleep(1000);
     }

現在調用update方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM