com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was

所报异常:

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

知道后端返回的数据格式后,重新定义接收的实体类就行。

总的来说,就是前后端沟通不到位。

猜你喜欢

转载自blog.csdn.net/qq_54087555/article/details/127423567
今日推荐