私はJavaのObserver
とObservable
のクラスを使ってObserverパターンを実装して、変数を変更するのを待ちます。私は問題をコンパイル可能なJavaプロジェクトに単純化しました。私が経験しています問題は、私はServerResonse.java
でsetResponse
を呼び出すしようとすると、観測者が...通知されないですObserver
この場合、Java ObserverとObservableを使用できますか?
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());
}
}
を実装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);
}
}
クラスを拡張し
クラスが、私がをUserProfileActivity.java
に電話すると、オブザーバーは通知を受け取ることができます。この動作は私が期待したものではありません。
Webサーバーからの応答が受信された後に、クラスがsetResponse
を呼び出すことが予想される動作です(これはすべてServerResponse
で処理されます)。
私はJavaのObserver
とObservable
クラスを誤解していますか? Observer
がObserver
が通知を受け取るべきものである場合、Observer
がsetResponse
をServerResponse
に呼び出すことができる理由について混乱しています。私は少し後ろにいるようです。
このコードはすべて、notifyObservers(ServerResponseのStringパラメータを持つ未使用のコンストラクタを除く)への呼び出しをトリガするsetResponseの呼び出しをどこにも見ないためです。 – john16384
はい、私は 'UserProfileActivity'と' ServerResponse'で 'setResponse'という行を削除しました。なぜなら、私が望む結果を提供しなかったからです。 – AvP
Observableのことを誤解していると思います。 notifyObserversを呼び出すと、メッセージや何も送信されません。登録されたObserverごとに、同じスレッド上でupdateメソッドを呼び出すだけです。 – john16384