规避 erizet/SignalA 使用中JsonString =null 报错的问题

5 篇文章 0 订阅
1 篇文章 0 订阅

由于项目需求,跟.Net服务器有长链接,最终选择用SignalA来做,在Github上找了一圈,最终选用 https://github.com/erizet/SignalA 集成到自己的项目里。

在集成SignalA项目过程中, 使用创建一个Service来开启SignalA服务,但是出现了一个问题,当网络空闲的时候,Json字符串为null的时候,没有补获string = null 的异常。去GitHub上issue上查看,也有遇到这个问题。坑爹的是,代码已经提交修复了这个Bug,但是作者没有更新版本。

两个解决方案:

1.将源码clone下来,自己改,再放到自己的工程,不直接使用依赖。

2.就是我采用的方案,为了不集成源码,我写了一个工具类SignalAUtils。在使用的时候才去调用,不用的时候就断开连接

上源码:

SignalAUtils.hubConnection = new HubConnection(SignalAUtils.getHubUrl(),MeasurePointActivity.this,new LongPollingTransport()){
    @Override
    public void OnError(Exception exception) {
        Log.v("","");
    }

    @Override
    public void OnMessage(String message){
        Log.v("","");
    }

    @Override
    public void OnStateChanged(StateBase oldState, StateBase newState) {
        switch (newState.getState()) {
            case Disconnected:
                break;
            case Connecting:
                break;
            case Connected:{
                // 调用方法
                DHParseUtils.setId(1);
                DHParseUtils.sendTrendData(mListDatas);
                DHParseUtils.DealNetData();
                ReceiveData();
            }
            break;
            case Reconnecting:
                Log.v("","");
                break;
            case Disconnecting:
                Log.v("","");
                break;
        }
    }


};

SignalAUtils.init();
SignalAUtils.Connect();
当你不用的时候调用

SignalAUtils.DisConnect();
下面是SignalAUtils的源码
public class SignalAUtils {

    private final static String TAG = SignalAService.class.getSimpleName();;
    private static String HUB_URL = DHURLUtils.GetRendAtlasUrl();
    private static Context mContext ;
    public  static HubConnection hubConnection = null;
    /*
   * hub代理 panderman 2013-10-25
   */
    public static IHubProxy hub = null;

    /**
     * 开启推送服务 panderman 2013-10-25
     */
    public static void init() {
        try {
            //服务器端的HUB为ChatHub
            hub = hubConnection.CreateHubProxy("GraphRealDataHub");
        } catch (OperationApplicationException e) {
            e.printStackTrace();
        }
    }

    // 连接
    public static void Connect(){
        if (hubConnection == null)
            return;
        hubConnection.Start();
    }

    // 断开连接
    public static void DisConnect(){
        if (hubConnection == null)
            return;
        hubConnection.Stop();
        hubConnection = null;
    }

    public static void postParams(String params,String methodName){
        if (hub == null)
            return;

        List<String> paramsList = new ArrayList<>();
        paramsList.add(params);
        hub.Invoke(methodName,paramsList, new HubInvokeCallback() {
            @Override
            public void OnResult(boolean succeeded, String response) {
                Log.v(TAG, response);
            }

            @Override
            public void OnError(Exception ex) {
                Log.v(TAG,"error");
            }
        });
    }

    public static String getHubUrl() {
        return HUB_URL;
    }

    public static void setHubUrl(String hubUrl) {
        HUB_URL = hubUrl;
    }

    public static Context getmContext() {
        return mContext;
    }

    public static void setmContext(Context mContext) {
        SignalAUtils.mContext = mContext;
    }
}
经过测试,可以暂时规避问题,但是治标不治本啊!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值