1. 程式人生 > >規避 erizet/SignalA 使用中JsonString =null 報錯的問題

規避 erizet/SignalA 使用中JsonString =null 報錯的問題

由於專案需求,跟.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;
    }
}
經過測試,可以暫時規避問題,但是治標不治本啊!