Retrofit - 12 retrofit中网络请求接口实例解析

public interface MyInterface {
  @GET(“…/…”)
  Call<List<MyResponse>> getCall();
}
“…/…” 前面一部分是baseUrl地址,后面一部分是注解的那部分地址。

注意:如果我们在注解后面参数已经设置一个完整的URL地址的话,那我们在设置Retrofit对象的时候可以不设置BaseUrl这个参数。


以下是 Retrofit.java 类中的代码:

// Single-interface proxy creation guarded by parameter safety.
@SuppressWarnings("unchecked") 
  public <T> T create(final Class<T> service) {
    // 对传进来的接口字节码进行验证
    Utils.validateServiceInterface(service);
    // 标志位,表示是否需要提前验证和解析这个接口
    if (validateEagerly) { 
      eagerlyValidateMethods(service);
}
// 使用的动态代理进行操作
    return (T) Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[] { service },
        new InvocationHandler() {
          private final Platform platform = Platform.get();
          @Override // 真正解析接口操作的地方
          public Object invoke(Object proxy, Method method, @Nullable Object[] args)
              throws Throwable {
            // If the method is a method from Object then defer to normal invocation.
            if (method.getDeclaringClass() == Object.class) {
              return method.invoke(this, args);
            }
            if (platform.isDefaultMethod(method)) {
              return platform.invokeDefaultMethod(method, service, proxy, args);
            }
            // 重要的三行代码
            ServiceMethod<Object, Object> serviceMethod =
                (ServiceMethod<Object, Object>) loadServiceMethod(method);
OkHttpCall<Object> okHttpCall = 
             new OkHttpCall<>(serviceMethod, args);
            return serviceMethod.adapt(okHttpCall);
          }
        });
  }

boolean isDefaultMethod(Method method) {
   return false;
}

ServiceMethod:对应一个接口的方法,它把它做好了封装,在这个里面大家以后会看到有众多的网络配置请求参数,还有包括URL等等。


猜你喜欢

转载自blog.csdn.net/androidsj/article/details/79940803
今日推荐