作为一个尽职的码农, 总是在一个坑中埋头苦干之后转头跳入另一个坑。这不,又来了。

今天中午午睡之后突然就遇到了一个问题,在请求网络时遇到了这个异常(ArrayIndexOutOfBoundsException)。然后就开始了漫长的上网找答案。无奈,都不管用

网上有人说关闭InstantRun,并且重新Clear,Rebuild就可以了。可我的是新版本,并没有找到InstantRun。无奈,只能自己来摸着石头过河了。

终于再查找日志的时候发现了一个问题。其实问题很简单。就是因为在配置请求API的时候出的问题。

如图Android Retrofit2请求数据出现 java.lang.ArrayIndexOutOfBoundsException

不知道自己是脑子短路和还是啥。在配置API的时候把@Body写成了@FieldMap。结果可想而知自然出错了。大家可能还不知道为什么会出错。那是因为我们在写接口的时候都会涉及到参数加密,这个项目也不例外。在拦截器里收到RequestBody的参数之后,在处理这些参数加密的时候出的问题。因为@FieldMap和@Body这两种方式配置,导致的结果就是Body的格式不一样。@FieldMap是以&连接Key、Value的。而Body是以“ : ”来连接的。所以在拼接字符串就会出现数组越界的问题。

至此,一个坑终于跳过了,不知道下一个坑又会在哪里。。。哈哈

提醒大家一下哈,有问题之后一定要先看日志。网上别人遇到的问题未必就是自己遇到的问题。同一个问题导致的因素五花八门。一味的网上找答案很容易既浪费了时间又没解决问题

对了,再给大家说一下@FieldMap和@Body这两种方式的区别。
具体的情况大家可以看一下这个博主写的,写的很好,很明白。
https://blog.csdn.net/u013827143/article/details/86222486

相关文章: