引言
公司项目终于上线了.趁着有时间.对于这段时间以来的所学所感是时候来个总结了.也想想在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>" + 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.