Android app开发中Retrofit框架的初步上手使用

2019-12-10 19:05:41王振洲

在构造函数中调用了parseResponseType,parseResponseType解析了方法签名,根据方法的返回值类型及最后一个参数的类型判断方法的类型是哪种ResponseType

无论是哪种ResponseType,最终都是调用invokeRequest执行实际的请求,接下来依次看下invokeRequest的执行步骤

RestAdapter.invokeRequest

第一步是调用methodInfo.init()解析调用的方法,方法里有做判断,只在第一次调用时解析,因为处一次解析后这个对象就被缓存起来了,下次调同一个方法时可以直接使用

 synchronized void init() {
  if (loaded) return;

  parseMethodAnnotations();
  parseParameters();

  loaded = true;
 }

在RestMethodInfo.init中分别调用

  • parseMethodAnnotations():解析所有方法的Annotation
  • parseParameters():解析所有参数的Annotation
    for (Annotation methodAnnotation : method.getAnnotations()) {
     Class<? extends Annotation> annotationType = methodAnnotation.annotationType();
     RestMethod methodInfo = null;
     // Look for a @RestMethod annotation on the parameter annotation indicating request method.
     for (Annotation innerAnnotation : annotationType.getAnnotations()) {
      if (RestMethod.class == innerAnnotation.annotationType()) {
       methodInfo = (RestMethod) innerAnnotation;
       break;
      }
     }
     ...
    }
    
    

    在parseMethodAnnotations中,会获取方法所有的Annotation并遍历:
    对于每一个Annotation,也会获取它的Annotation,看它是否是被RestMethod注解的Annotation,如果是,说明是@GET,@POST类型的注解,就调用parsePath解析请求的Url,requestParam(URL中问号后的内容)及Url中需要替换的参数名(Url中大括号括起来的部分)