I am implementing Observer design pattern to organize client-server part of my application. I have interface NetworkObserver for handling events in Activities, which awaiting for server data.
public interface NetworkObserver {
void handleEvent(String response);
}
Also i have concrete MainActivity, which implements interface NetworkObserver. This activity using NetworkWebSocketManager for sending request to server.
public class MainActivity extends AppCompatActivity implements NetworkObserver {
...
public void buttonClicked(View view) {
// Send request
NetworkWebSocketManager manager = NetworkWebSocketManager.getInstance();
manager.addNetworkObserver(this);
manager.send(Constants.kRouteRegistration, credentials);
}
// Interface implementation
@Override
public void handleEvent(String response) {
Log.e("WERBSOCKET", "RESPONSE FOR ACTIVITY " + response);
}
}
NetworkWebSocketManager is a singleton class, which implements NetworkObservable interface
/**
* Interface for transfering incoming server data to observers
*/
public interface NetworkObservable {
void addNetworkObserver(NetworkObserver observer);
void removeNetworkObserver(NetworkObserver observer);
void notifyNetworkObserver(String response);
}
and manager itself
public class NetworkWebSocketManager implements NetworkObservable {
private static final NetworkWebSocketManager ourInstance = new NetworkWebSocketManager();
private ArrayList<NetworkObserver> observers;
public static NetworkWebSocketManager getInstance() {
return ourInstance;
}
...
}
This method in NetworkWebSocketManager sending requests to server and receiving data from it. In overrided method onMessage() of WebSocketListener i got answer from server and call notifyNetworkObserver() of interface NetworkObservable, implemented in manager.
public void send(String route, Object params) {
...
WebSocket webSocket = client.newWebSocket(request, new WebSocketListener() {
@Override
public void onOpen(WebSocket webSocket, Response response) {
super.onOpen(webSocket, response);
}
@Override
public void onMessage(WebSocket webSocket, String text) {
super.onMessage(webSocket, text);
notifyNetworkObserver(text);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
super.onFailure(webSocket, t, response);
t.rintStackTrace();
}
});
...
webSocket.send(jsonString);
}
Here is implementation of notifyNetworkObserver() in NetworkWebSocketManager
@Override
public void notifyNetworkObserver(final String response) {
Log.e("WEBSOCKET", "OBSERVERS COUNT " + observers.size()); // 1 observer
for(NetworkObserver observer : observers) {
Log.e("WEBSOCKET", "CURRENT OBSERVER " + observer); // com.example.MainActivity@1b723d05
observer.handleEvent(response);
}
}
The problem is observer.handleEvent(response); does not calls handleEvent(), which implemented in MainActivity. I am searched a lot, but i dont understand what's wrong.
Aucun commentaire:
Enregistrer un commentaire