003-2020-网络-Retrofit

186 阅读2分钟

0.参考文章

  1. Retrofit官网
  2. Retrofit GitHub
  3. 基本使用
  4. 二次封装
  5. 源码解析

待看文章

1.零散的点

  1. @Path 和 @Query
    //"article/list/0/json?author=鸿洋"
    @GET("article/list/{pageIndex}/json")
    Call<SpecificAuthorArticlesResponse> getSpecificAuthorArticles(
    	@Path("pageIndex") int pageIndex, 
    	@Query("author") String author);
    Call<SpecificAuthorArticlesResponse> call = service.getSpecificAuthorArticles(0, "鸿洋");
    
    • @Path 用于填充url中的缺省值
    • @Query 用于标记查询参数
    • 刚刚试验下,用@Path替代@Query会报异常
  2. retrofit2/Call enqueue
    • enqueue是在后台执行网络请求
    • 并不是每个网络请求按照顺序去执行.多次执行enqueue将多个网络请求加入队列,队列中所有请求马上就执行,不会等待之前的结束再执行下一个.
    • 队列的作用是记录同时执行的请求数.
    • 如果当下正在执行的请求数>=指定数量,新加入的请求就会先放在队列里,等待之前的请求执行完成,再顺序执行.
  3. Converter
    • Converter对请求和响应进行转换. 不仅仅转换响应!
  4. Retrofit实现文字和多张图片一起上传

2.Retrofit使用中遇到问题

  1. 设置baseUrl报错
    2020-10-22 16:29:50.150 23709-23709/com.huanhailiuxin.playjava E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.huanhailiuxin.playjava, PID: 23709
        java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of 'java.lang.invoke.LambdaMetafactory' appears in /apex/com.android.runtime/javalib/core-oj.jar)
            at okhttp3.internal.Util.<clinit>(Util.java:87)
            at okhttp3.internal.Util.skipLeadingAsciiWhitespace(Util.java:321)
            at okhttp3.HttpUrl$Builder.parse(HttpUrl.java:1313)
            at okhttp3.HttpUrl.get(HttpUrl.java:917)
            at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:506)
    
    • 解决:build.gradle中指定Java版本即可
    android {
        compileOptions {
            encoding "UTF-8"
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    

3.Retrofit源码解析