修改/覆盖库类'方法妥当

时间:2015-10-09 11:45:26

标签: android websocket java-websocket

我正在使用ararog的WebSocket Rails-Android库。

我根据从服务器端收到的数据在循环中订阅了几个频道。我为所有频道使用相同的WebSocketRailsDataCallback,唯一不同的是频道名称。我的问题是回调的onDataAvailable(Object data)数据只包含收到的JSON,它不包含频道名称,我找不到知道接收响应的频道的方法。

我尝试创建自定义接口和类,分别使用onDataAvailable(Object data, String channelName)签名和覆盖dispatch方法扩展WebSocketRailsDataCallback和WebSocketRailsChannel,但是类'变量是私有的,这意味着我不能拥有像下面这样的构造函数,因此无法将WebSocketRailsChannel强制转换为自定义类:

public CustomWebSocketRailsChannel(WebSocketRailsChannel channel)
    {
        super(/*channel arguments*/);
    }

我可以在方法中使用getDeclaredFields()获取字段,但它不能帮助我进行转换(我需要这些因为dispatcher.subscribe方法返回基类)。 我想到的下一个解决方案是为所有相关类(dispatcher,channel,dataCallback等)创建完整的自定义类,而不是继承它,但它是一个粗略的解决方案。另一个是联系和图书馆作者。任何更好,更简单的想法将不胜感激。

1 个答案:

答案 0 :(得分:0)

问题解决了;我没有注意到我只能通过覆盖DataCallback来实现它。我创建了以下类:

public abstract class CustomWebSocketRailsDataCallback implements WebSocketRailsDataCallback {
    public CustomWebSocketRailsDataCallback(String channel)
    {
        mChannel = channel;
    }

    public String mChannel = null;
}

创建此类的实例,在mChannel中保存通道名称并在onDataAvailable中访问它。