Hello,大家好,有一段时间没更新博客了,因为最近有点忙。话不多说,切入正题!
之前自己写的一个Android项目,但是这个项目架构并不是很好,项目各模块的依赖性很强,尤其是数据和界面这块,所以我想把前后端分离的概念应用到本项目中。
项目后端使用SSM框架开发数据接口,然后Android端使用Retrofit2+OkHttp3解析json,但是就在这个过程中,发生了一个让我很费解的bug。本片博文主要来记录一下这个bug,希望能帮助到大家。
一、后端JSON返回格式
这是后端返回的JSON格式,很标准
二、Android端解析JSON
问题就发生在解析数据的时候,之前我用Gson解析的时候,Gson一直报JSON语法错误,无法解析的异常,然后从网上找了很多解决方法,尝试以后发现都不可以。
后来想到SSM框架默认使用的Jackson来处理Json,然后我就想在Android里面也用Jackson,但是却发现Android没有提供Jackson的convert,需要自己去写,然后果断pass。
最后我想到在我一个J2EE项目里面,我用的是FastJson来处理JSON,然后从网上找到了这方面的方法,在Android里面集成了FastJson,然后写了一行代码就搞定了这个bug。代码奉上:
Android依赖:
解析JSON的代码:
这里有一个坑,不知道是不是Retrofit2的bug,就是在baseUrl里面填写接口地址的时候,如果把整个地址放进去,Retrofit解析的时候只会解析到域名结束,最终返回一个网页,并不是返回的json数据,解决这个问题,我们要在Android的Service层去处理,拼接这个接口地址:
第一:在baseUrl处填写接口地址的host地址:
第二:在Android的Service层通过请求注解填写剩余接口地址的详细部分:
这样,Retrofit在解析的时候就会自动拼接接口地址,从而返回正确的Json数据
最终这个问题还是解决了,花费了我很长时间,如果你也想这样演进你的项目,相信本篇博文会帮助到你,欢迎大家留言评论,谢谢!