Android接入AWS Amplify后出现ApolloParseException及非空参数异常求助
问题排查与解决方案
1. Kotlin版本兼容问题(核心嫌疑)
Apollo 2.5.11发布于2022年,对Kotlin 1.8.x的兼容性有限——Kotlin 1.8引入了字节码和空安全检查的关键变化,旧版Apollo的解析逻辑未适配这些规则,直接导致解析时触发非空断言异常。
- 可选解决方案:
- 降级Kotlin到1.7.x(推荐1.7.20),这是Apollo 2.x系列官方支持的最高兼容版本
- 若必须保留Kotlin 1.8.x,升级Apollo到2.5.14+(该版本开始部分适配Kotlin 1.8),或直接迁移到Apollo 3.x(完全支持Kotlin 1.8+及后续版本)
2. Amplify响应结构干扰
拦截器能获取到数据说明HTTP请求链路正常,但Amplify可能在响应返回给Apollo前添加了额外的包装层(比如Amplify专属的响应结构),导致Apollo无法识别标准GraphQL响应格式,触发解析异常。
- 排查与修复:
- 打印拦截器捕获的完整响应体,对比迁移前的纯GraphQL响应格式,确认是否存在Amplify插入的额外字段/嵌套结构
- 若存在结构差异,在Amplify拦截器中新增响应转换逻辑,剥离冗余包装内容,还原为Apollo可解析的标准GraphQL响应格式
3. 非空字段的实际null值问题
kotlin.jvm.internal.Intrinsics.checkNotNullParameter异常明确指向:Apollo生成的Kotlin模型中某个被标记为非空的字段,在实际响应中返回了null。Kotlin 1.8的空安全检查比1.5更严格,直接触发该断言。
- 解决步骤:
- 核对GraphQL Schema定义:确认被标记为非空(
!)的字段,是否在Amplify返回的响应中确实存在null值 - 若Schema定义合理但响应存在null,检查Amplify的数据源配置,确保后端返回符合Schema约束的非空值
- 若为Apollo代码生成bug(版本兼容导致),可临时修改生成的模型类,将对应字段改为可空类型(
?),或升级Apollo版本解决生成逻辑问题
- 核对GraphQL Schema定义:确认被标记为非空(
4. Gradle配置隐性冲突
Gradle 7.4.2对依赖解析、字节码处理规则做了调整,可能导致Apollo依赖冲突或生成代码异常。
- 快速验证操作:
- 清理Gradle缓存并重新构建:执行命令
./gradlew clean build --refresh-dependencies - 检查Apollo插件配置,确保
apollo块中的代码生成规则与Kotlin版本匹配,例如在Kotlin 1.8环境下,关闭旧的useExperimentalCodegen选项
- 清理Gradle缓存并重新构建:执行命令
内容的提问来源于stack exchange,提问作者Rajan Kumar Choudhary
相关产品推荐
相关产品推荐

