一、说明
本文主要是记录了在使用retrofit 2.0+的版本中遇到的问题,以免后面忘记了,也给遇到同样问题的兄弟提个醒,避免入坑,后续有问题会持续更新
二、问题描述
- 因为对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中以“/”结尾,相对路径开头不加就没问题了
三、总结
时间紧,还要赶项目,暂时就这么多,后续有遇到新问题再持续更新