第一个github项目-SimplifyNet

引言

公司项目终于上线了.趁着有时间.对于这段时间以来的所学所感是时候来个总结了.也想想在github.stackoverflow混了那么久了.貌似从来没有回馈过社区.虽然能力有限.但是也想把自己的一些东西丢上github来放着.这估计是程序员的一个结吧.

回归正题.今天终于把第一个github项目给上传了.SimplifyNet.这是基于Okhttp+Gson的一个简单封装的网络访问框架.在各个层次都有明确的异常抛出(更加方便添加头部.添加特殊请求参数.添加签名等逻辑).回调返回实体/错误信息.也用上了mvp.优雅的code是我们的追求.

Talk is cheap.Show me the code.

关于mvp的介绍就不多说了.github等社区都有很好的demo来讲解了.

Map<String, String> map = new HashMap<String, String>();
map.put("cityname", cityName);
//回调的方式返回bean/错误信息
CommonRequest.getWeatherMsg(map, new IDataCallBack<Weather>() {
     @Override
     public void onSuccess(Weather weather) {
          iWeatherView.onSearchWeatherResult(weather);
     }

     @Override
     public void onError(int code, String errorMsg) {
           LogUtil.i("SearchWeather error mes&gt;" + errorMsg);
           iWeatherView.onSearchWeatherError(code, errorMsg);
     }
});</pre> 

public static void getWeatherMsg(Map<String, String> specificParams, final IDataCallBack<Weather> callback) {
        HashMap params = new HashMap();
        params.putAll(specificParams);
        Request request = null;

        try {
            //根据map拼装request
            request = BaseBuilder.urlGet(HttpURL.BASE_WEATHER_URL, CommonParams(params)).build();
        } catch (DreamLinerException var6) {
            callback.onError(var6.getErrorCode(), var6.getErrorMessage());
            return;
        }

        //执行访问
        OtpBaseCall.doAsync(request, new IHttpCallBack() {
            public void onResponse(Response response) {
                BaseResponse basicResponse = new BaseResponse(response);
                Type listType = (new TypeToken<Weather>() {
                }).getType();

                //具体根据后台的定义来回调执行onSuccess/onFailure
                try {
                    Weather weather = (Weather) basicResponse.getResponseBodyStringToObject(listType);
                    CommonRequest.delivery.postSuccess(callback, weather);
                } catch (Exception var5) {
                    CommonRequest.delivery.postError(1, "获取天气失败,请检查你输入的城市是否正确", callback);
                }
            }

            public void onFailure(int errorCode, String errorMessage) {
                callback.onError(errorCode, errorMessage);
            }
        });
    }

生成request的过程.把map中的keys&values组装一下.附上header+sign的逻辑(可以自定义)

public static Request.Builder addCommonCookie(Request.Builder builder) {
    //add apistore apikey
    builder.header("apikey", "15f0d14ed33720b6b73ec8a3f7bb4d46");
    return builder;
}

public static Request.Builder urlGet(String url) throws DreamLinerException {
    return urlGet(url, (Map) null);
}

public static Request.Builder urlGet(String url, Map<String, String> specificParams) throws DreamLinerException {
    if (specificParams != null) {
        url = url + "?" + Util.ConvertMap2HttpParams(Util.encoderName(specificParams));
    }

    return addCommonCookie((new Request.Builder()).url(url));
}

通过回调的方式来返回结果.而且ExecutorDelivery来可以在回调中直接进行ui操作.而且在每个层次.最基本okhttp网络访问+数据解释层次都有比较好的检测抛出机制.更加方便我们来定位错误.
框架很简单.可以根据自己的后台的协定.丰富一下就能在自己的项目中使用上了.

总结

站在伟人的肩膀上写代码真是舒心.总结一下就有一個很不错的简单框架了.多学多看.to be continue.

坚持原创技术分享,您的支持将鼓励我继续创作!