Android 二次封装网络加载框架,音视频开发前景

本文探讨了Android网络请求的封装,从简单的工具类到接口的统一,再到引入网络配置实体类NetworkOption,以提高代码的灵活性和可维护性。通过建造者模式构建NetworkOption,并以OkHttpRequest为例,展示了如何根据NetworkOption配置网络请求。最后介绍了如何使用简单工厂模式实现网络请求框架的切换,以适应项目需求变化。
摘要由CSDN通过智能技术生成

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);


}

那以后如果要配置缓存路径呢,配置请求超时时间,读取超时时间呢,直接在方法中增加相应的参数?

这样的做法是不太明智的,会导致接口越来越臃肿。

既然这样,那有没有办法解决呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值