You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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版本解决生成逻辑问题

4. Gradle配置隐性冲突

Gradle 7.4.2对依赖解析、字节码处理规则做了调整,可能导致Apollo依赖冲突或生成代码异常。

  • 快速验证操作:
    • 清理Gradle缓存并重新构建:执行命令 ./gradlew clean build --refresh-dependencies
    • 检查Apollo插件配置,确保apollo块中的代码生成规则与Kotlin版本匹配,例如在Kotlin 1.8环境下,关闭旧的useExperimentalCodegen选项

内容的提问来源于stack exchange,提问作者Rajan Kumar Choudhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:26:08