关于Retrofit 2.0使用中遇到的问题

一、说明

本文主要是记录了在使用retrofit 2.0+的版本中遇到的问题,以免后面忘记了,也给遇到同样问题的兄弟提个醒,避免入坑,后续有问题会持续更新

二、问题描述

  1. 因为对retrofit结合rxjava做了封装,然后也没有打印返回error信息,导致一个很诡异的问题就是请求一个接口一直没有任何反应,日志也没显示异常,找了一下午没找到原因,而且发现同一个接口不同地方调用,请求参数不同,有的成功,有的没反应,后来对响应的封装做了移除,直接new了一个consummer来接受响应参数,结果应用直接崩溃了,信息如下:

............

Field map contained null value for key 'projectId'.....

...............

终于有反应了,这是好事情,赶紧把参数中为null的改为“”,再试一次,结果就正常了,真是坑啊,查了官方更新日志才知道,2.0以后Field 和FieldMap的入参都不允许为null

A {@code null} value for the map, as a key, or as a value is not allowed.

官方说明链接:https://github.com/square/retrofit/commit/10ff3d97faadcd6f716447d3376f9f51992e44dd

这个是着实有点坑的,不对string类型的变量进行赋值,在不同的调用场景下,某些变量在请求时就很可能变成null了,当封装了retrofit,而且在请求时又恰巧没有打印返回的error信息,出现的现象就是请求一个接口和没请求一样,点了不会有任何反应,使用okhttp自带的日志拦截器也不会打印任何信息,这个一定要注意,不处理null值要么没反应要么就是crash

2.关于请求URL处理上的问题

这个问题应该很多人都遇到了,网上也有很多人给了解决方案

@Path("url")String url  用这种方式注解url来替换请求方式中的相对路径时,部分字符在请求时会被进行编码 
@Url String url  直接使用这个就没有这个问题了

还有一点就是在请求时baseUrl中“/”和相对路径中“/”的处理问题,建议使用大家都推荐的baseUrl中以“/”结尾,相对路径开头不加就没问题了

三、总结

时间紧,还要赶项目,暂时就这么多,后续有遇到新问题再持续更新

猜你喜欢

转载自blog.csdn.net/you__are_my_sunshine/article/details/84033702