Request build = builder.build();
cilent.newCall(build).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
handleError(e, iResponseListener);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
handleResult(response, iResponseListener);
}
});
}
public static void doPost(Context context,String url, Map<String, String> paramsMap, NetworkOption networkOption,
final IResponseListener iResponseListener) {
OkHttpClient.Builder mBuilder= new OkHttpClient.Builder().
connectTimeout(10, TimeUnit.SECONDS).writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.addInterceptor(new LoggingInterceptor())
.cache(new Cache(context.getExternalFilesDir(“okhttp”),cacheSize));
OkHttpClient cilent = mBuilder.build();
url= NetUtils.checkUrl(url);
final NetworkOption option=NetUtils.checkNetworkOption(networkOption,url);
FormBody.Builder builder = new FormBody.Builder();
FormBody formBody = builder.build();
Request.Builder requestBuilder = new Request.Builder().url(url).post(formBody).tag(option.mTag);
Request request = requestBuilder.build();
cilent.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
handleError(e,iResponseListener);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
handleResult(response,iResponseListener);
}
});
}
这种封装成工具类的比完全没有封装的好了很多,但是还是存在一定的问题的。封装成工具类的话,别人完全有权限访问你这个工具类,他可以随时修改你工具类里面的实现,这给维护带来了一定的成本。那有没有更好的方法呢?
大多数人都会想到的是封装统一网络接口,没错,确实是这样。于是,经过一番思考以后,我们可能写出以下的代码。
void doGet(Context context,String url, final Map<String, String> paramsMap, final IResponseListener iResponseListener);
如果我们需要动态配置请求头呢,请求 TAG 呢,这时候你会怎么写,继续增加参数吗?
这时候接口可能如下:
public interface NetRequest{
void doGet(Context context,String url, final Map<String, String> paramsMap,final Map<String, String> headMap, String tag,final IResponseListener iResponseListener);
}
那以后如果要配置缓存路径呢,配置请求超时时间,读取超时时间呢,直接在方法中增加相应的参数?
这样的做法是不太明智的,会导致接口越来越臃肿。
既然这样,那有没有办法解决呢?