Android Kotlin Retrofit2无法解析接口数据:转换器创建失败
问题分析与解决方案
崩溃的核心原因有两个:
- 接口返回的JSON结构不是直接的商品数组,而是包含
products数组、total、skip、limit的顶层对象,直接用List<Products>接收结构不匹配 - 使用kotlinx.serialization作为Retrofit转换器时,数据类缺少序列化注解,导致转换器无法解析数据
修复步骤:
1. 给Products数据类添加序列化注解
导入kotlinx.serialization.Serializable并标记数据类:
import kotlinx.serialization.Serializable @Serializable data class Products( val id: Int, val title: String, val description: String, val price: Double, val discountPercentage: Double, val rating: Double, val stock: Int, val brand: String, val category: String, val thumbnail: String, val images: List<String> )
2. 创建顶层响应数据类匹配接口返回结构
新建ProductsResponse类包裹完整的JSON响应:
import kotlinx.serialization.Serializable @Serializable data class ProductsResponse( val products: List<Products>, val total: Int, val skip: Int, val limit: Int )
3. 修改ApiService的返回类型
将接口方法的返回值改为ProductsResponse:
interface ProductsApiService { @GET("/products") suspend fun getProductsList(): ProductsResponse }
4. 确认依赖与插件配置(若有遗漏)
- 项目根目录
build.gradle中添加序列化插件:plugins { id("com.android.application") version "..." apply false id("org.jetbrains.kotlin.android") version "..." apply false id("org.jetbrains.kotlin.plugin.serialization") version "..." apply false } - 模块
build.gradle中应用插件并添加依赖:plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.plugin.serialization") } dependencies { implementation("com.squareup.retrofit2:retrofit:2.9.0") implementation("com.jakewharton.retrofit2:converter-kotlinx-serialization:2.9.0") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1") }
修改完成后,调用接口时可通过response.products获取商品列表。
内容的提问来源于stack exchange,提问作者Ayzat Rizatdinov
相关产品推荐
相关产品推荐

