已解决com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but w

已解决com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was异常的正确解决方法,亲测有效!!!

在这里插入图片描述

报错问题

粉丝群里面的一个小伙伴敲代码时发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug不会解决的小伙伴),报错信息如下:

在这里插入图片描述

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数据格式:

{

    "code":200,

    "msg":"保存成功",

    "data":{

            "text":"傻眼了吧"

    }

}

解决方法

解决方法如下

在这里插入图片描述
问题很好解决,前端或者后端一方更改实体类,前后端保持一致就行,但有时候你”地位不够“,如干入职的小菜鸟,That’s me。你不敢,那还是自己解决问题吧!
重要的是查看后端返回的数据格式。如:

我的retrofit请求,一个接口方法:

Call upload(@PartMap Map<String, RequestBody> params, @Part MultipartBody.Part[] dataFiles);
UploadFileInfoResult类是我将后端返回数据进行转化成为的类。

第一种方式:这时你可以将这个类换成OkHttp中的ResponseBody类,在debugger模式下在请求回调onResponse中查看返回的数据格式。

第二种方式,或者你也可以通过Android studio的network prefiler查看网络请求,官网地址:利用网络性能剖析器检查网络流量 | Android 开发者 | Android Developers

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

福利

每周会送6本技术书籍包邮到家
由于博主时间精力有限,每天私信人数太多,没办法每个粉丝都及时回复
大家可以进社区裙或者添加博主微信
点击下方链接即可
http://t.csdn.cn/6kInJ

猜你喜欢

转载自blog.csdn.net/weixin_50843918/article/details/129680820
今日推荐