0

我正在使用 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*/);
    }

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

4

1 回答 1

0

问题解决了; 我走得太深了,没有注意到我可以通过仅覆盖 DataCallback 来做到这一点。我创建了以下类:

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

    public String mChannel = null;
}

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

于 2015-10-14T09:11:49.883 回答