Retrofit 配合泛型数据返回错误 Expected BEGIN_ARRAY but was STRING

本文主要是介绍Retrofit 配合泛型数据返回错误 Expected BEGIN_ARRAY but was STRING,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Expected BEGIN_ARRAY but was STRING at line 1 column 41 path $.result.xxx

问题源头就是在转换工厂进行数据转换的时候出现错误,
这里是需要Array类型却捕捉到String,所以解析错误,

解析的BaseResponse.kt
	data class BaseResponse<T> (val code:String,val msg:String,val result:T)

比如是一个正常的获取通知接口,你可能需要一个Response

data class NoticeResponse (val noticeList:MutableList<NoticeInfo>){data class NoticeInfo (val title:String,val info:String,val createTime:String)
}

请求结果处理

 abstract class TConsumer<T> : Consumer<BaseResponse<T>> {override fun accept(t: BaseResponse<T>) {try {val resCode = t.codeif ("0" == resCode) {onSuccess(t.result)} else {onFailed(resCode,t.msg)}} catch (e: Exception) {onFailed(ErrorStatus.API_ERROR,e.message.toString())}}abstract fun onSuccess(response: T)abstract fun onFailed(errCode: String, errMsg: String)
}

然后在subscribe中的成功代码

object:TConsumer<NoticeResponse>(){override fun onSuccess(response:NoticeResponse){it.onGetNoticeSuccess(response)// MVP 中View的实现方法}
}

偏偏就出错了,获取数据后发现,返回的数据时这个样子的:

{"code":"0","msg":"处理成功","result":"{"noticeList":[{"title":"通知标题","info":"通知信息。。。","createTime":"2018-12-12"},{"title":"通知标题","info":"通知信息。。。","createTime":"2018-12-12"},{"title":"通知标题","info":"通知信息。。。","createTime":"2018-12-12"}]}"}

问题就出在下图中的双引号
在这里插入图片描述
我们的数据解析需要的是一个泛型T,在这个例子里是MutableList<NoticeInfo>,但是解析result节点却出现了字符串数据,所以

Expected BEGIN_ARRAY but was STRING

实际上这个是后台的数据类型错误造成的,
相应的数据类型结构是:

{"code": "0","msg": "处理成功","result": {"noticeList": [{"title": "通知标题","info": "通知信息。。。","createTime": "2018-12-12"},{"title": "通知标题","info": "通知信息。。。","createTime": "2018-12-12"},{"title": "通知标题","info": "通知信息。。。","createTime": "2018-12-12"}]}
}

外层的Map中存在三个变量:

Map<String,Object> ->code:Stringmsg:Stringresult:Map<String,Object>  // 我们的泛型T就是这里的result//结果在返回的时候 转换成了// result:Map<String,String>

实际上这种问题出现的频率不高,一般在项目初期可能遇到,跟服务器沟通好就不会出现问题,以此类推:

Expected BEGIN_OBJECT but was BEGIN_ARRAY 

是解析时需要一个Object,返回的却是一个Array,

// 解析的时候,开始如果是  " 开头,代表是字符换
//  如果是 [  开头,表示Array或者List
//  如果是 {  则代表对象

以上对号入座

这篇关于Retrofit 配合泛型数据返回错误 Expected BEGIN_ARRAY but was STRING的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073905

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

java String.join()方法实例详解

《javaString.join()方法实例详解》String.join()是Java提供的一个实用方法,用于将多个字符串按照指定的分隔符连接成一个字符串,这一方法是Java8中引入的,极大地简化了... 目录bVARxMJava String.join() 方法详解1. 方法定义2. 基本用法2.1 拼接

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据