Retrofit的CallAdapter详解

Retrofit的CallAdapter详解,第1张

get 方法的参数 Type Annotation[] 分别 对应 定义的api方法的 返回值Type 方法的注解 ,下图比较清晰。

图中可以看出 returnType 对应 LiveData<LoginInfo> ,而 annotations 则对应 POST和FormUrlEncoded

但是 returnType 直接获取到的不是 LiveData ,上一篇文章就说到 Type的几个子接口类 ,这里就要用到了。

先调用辅助方法 getRawType(returnType) ,取得原始类型,判断是否是 LiveDataclass ,不是的话返回 null ,这样 retrofit就会循环下一个Factory ,直到 返回值不为空的CallAdapter

如果原始类型是 LiveDataclass ,则判断是否是 ParameterizedType ,否则抛出异常。通过 getParameterUpperBound(0, (ParameterizedType) returnType) 获取泛型 Type responseType ,最后将这个 responseType 作为参数传给 CallAdapter

PS:这里使用 getRawType(responseType) 的话,得到的原始类型会是 LoginInfo

从上面可知, get方法可以理解为判断是否是对应的CallAdapter和取得必要参数的方法 。而且还可以通过在 定义的api方法(如:login)那里添加注解 来做一些特殊 *** 作。

这里继续以上面的 LiveData<LoginInfo> 为例,可以在 adapt 方法创建一个 LiveData 且作为返回值返回。

然后通过 call 访问接口获取数据,将返回来的数据通过 livaDatapostValue() 通知到外部,这样就完成了获取数据且关联了生命周期。

上图所示,创建 LoginService 调用 login 方法,因为返回的是 LiveData 所以使用起来跟普通的一样就好了,设置 Observer ,在 onChanged 方法回调更新数据。

现代Android开发中,Retrofit是主流的网络请求框架,内部封装Ok>

Background concurrent copying GC freed 817417(13MB) AllocSpace objects, 46(1880KB) LOS objects, 12%

这是Json解析错误的打印输出,很可能是你的数据类里包含了Drawable或者其他图形相关的属性

以上就是关于Retrofit的CallAdapter详解全部的内容,包括:Retrofit的CallAdapter详解、Retrofit 源码分析、在用Retrofit的Gson解析器遇到的坑等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9655846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存