所报异常:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 34 path $.data
前提:Android端使用retrofit发送网络请求,对后端返回的json数据进行解析时报错误。
原因:后端返回的json数据格式与Android端定义的实体类所需josn格式不一致。
譬如:后端返回json数据格式:
{
"code":200,
"msg":"保存成功",
"data":""
}
Android端定义实体类转json数据格式:
{
扫描二维码关注公众号,回复: 14989961 查看本文章"code":200,
"msg":"保存成功",
"data":{
"text":"傻眼了吧"
}
}
这时候,由于data是一个Object类,而后端返回的data是一个字符串,就会报上面的错误。
问题很好解决,前端或者后端一方更改实体类,前后端保持一致就行,但有时候你”地位不够“,如干入职的小菜鸟,That's me。你不敢,那还是自己解决问题吧!
重要的是查看后端返回的数据格式。如:
我的retrofit请求,一个接口方法:
Call<UploadFileInfoResult> upload(@PartMap Map<String, RequestBody> params, @Part MultipartBody.Part[] dataFiles);UploadFileInfoResult类是我将后端返回数据进行转化成为的类。
第一种方式:这时你可以将这个类换成OkHttp中的ResponseBody类,在debugger模式下在请求回调onResponse中查看返回的数据格式。
第二种方式,或者你也可以通过Android studio的network prefiler查看网络请求,官网地址:利用网络性能剖析器检查网络流量 | Android 开发者 | Android Developers
知道后端返回的数据格式后,重新定义接收的实体类就行。
总的来说,就是前后端沟通不到位。