如何在深圳开发公司利用淘宝网站搭建虚拟机以支持APP开发?
摘要:淘宝网站如何做虚拟机,深圳开发app的公司,福田欧曼服务站电话,google搜索引擎入口google在上一篇文章中,我们详细分析了 Retrofit 中的注解解析和动态代理实现,本
淘宝网站如何做虚拟机,深圳开发app的公司,福田欧曼服务站电话,google搜索引擎入口google在上一篇文章中#xff0c;我们详细分析了 Retrofit 中的注解解析和动态代理实现#xff0c;本篇文章将继续深入研究 Retrofit 的核心源码#xff0c;重点分析 Retrofit 如何进行网络请求和响应处理。
网络请求
在使用 Retrofit 发起网络请求时#xff0c;我们可以通过定…在上一篇文章中我们详细分析了 Retrofit 中的注解解析和动态代理实现本篇文章将继续深入研究 Retrofit 的核心源码重点分析 Retrofit 如何进行网络请求和响应处理。
网络请求
在使用 Retrofit 发起网络请求时我们可以通过定义一个接口并使用 Retrofit 的注解来描述这个接口中的请求Retrofit 会自动生成一个实现该接口的代理对象。当我们调用这个代理对象的方法时Retrofit 会根据注解的描述构建一个 Request 对象并使用 OkHttp 将这个 Request 发送出去。
在 Retrofit 中我们可以通过 Retrofit#execute 或 Retrofit#enqueue 方法来发送请求。这两个方法的区别在于execute 方法会阻塞当前线程直到请求完成而 enqueue 方法会将请求加入到 OkHttp 的请求队列中并在请求完成时通过回调通知我们。
我们先来看一下 execute 方法的实现
public T T execute(CallT call) throws IOException {Utils.validateServiceInterface(call.request().tag(), call.request().url().toString());return (T) callAdapter(call, call.request().tag()).adapt(call).execute();
}
在这个方法中首先会对接口进行校验确保这个接口是有效的。然后我们会根据请求的 Tag 和 URL 来获取适配器callAdapter并使用适配器来执行请求。
适配器的作用是将请求的参数适配成 OkHttp 能够识别的形式并将 OkHttp 的响应适配成我们需要的形式。Retrofit 提供了一系列的适配器包括 Call 适配器、RxJava 适配器、CompletableFuture 适配器等。
我们来看一下 callAdapter 方法的实现
private CallAdapter?, ? callAdapter(Call? call, Object tag) {Type responseType call.request().method().equals(HEAD)? Void.class: getParameterUpperBound(0, (ParameterizedType) call.request().tag());return callAdapter(tag, responseType);
}在这个方法中我们首先根据请求的方法来判断响应的类型如果是 HEAD 方法那么响应的类型就是 Void否则我们会通过反射来获取请求的响应类型并使用这个响应类型来获取适配器。
获取适配器的方法是 callAdapter
public R, T CallAdapterR, T callAdapter(Object tag, Type returnType) {// ...for (CallAdapter.Factory factory : adapterFactories) {CallAdapter?, ? adapter factory.get(returnType, annotations, this);if (adapter ! null) {return (CallAdapterR, T) adapter;}}// ...
}在这个方法中我们会遍历所有的适配器工厂尝试获取适配器。在获取适配器时我们会将请求的响应类型、注解和 Retrofit 实例作为参数传入。每个适配器工厂都会判断这些参数是否符合自己的适配条件如果符合就返回一个适配器实例否则返回 null。在遍历完所有的适配器工厂之后如果还没有获取到适配器那么就会抛出一个异常。
获取到适配器之后我们就可以使用适配器来执行请求了。在适配器中我们会将请求参数转换成 OkHttp 的 Request 对象并将 OkHttp 的 Response 对象转换成我们需要的响应类型。具体的实现可以参考 Retrofit 提供的 CallAdapter 接口。
