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

Retrofit无法创建List<Ambhibian>转换器的致命异常求助

排查Android Kotlin项目中Retrofit转换器异常及主线程网络请求问题

1. 模型类拼写错误排查

错误提示里的java.util.List<com.example.amphibiansapp.model.Ambhibian>存在明显拼写问题——类名写成了Ambhibian(多了一个字母b),而接口返回的JSON结构对应应该是正确的Amphibian类。这种拼写不匹配会直接导致序列化库(如Gson)无法找到对应模型类,进而抛出转换器创建失败的异常。

解决步骤:

  • 检查项目中模型类的文件名和类定义,确保统一为Amphibian
  • 修正AmphibiansApiService中的泛型类型,将List<Ambhibian>改为List<Amphibian>

2. Retrofit转换器配置缺失

若Retrofit实例未添加JSON转换器工厂,会导致框架无法处理接口返回的JSON数据,同样触发转换器创建失败的异常。

解决步骤:

  • 构建Retrofit实例时必须添加对应的转换器工厂,以Gson为例:
val retrofit = Retrofit.Builder()
    .baseUrl("https://android-kotlin-fun-mars-server.appspot.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .build()
  • 确认项目依赖中包含转换器库,比如Gson转换器的Gradle依赖:
implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // 版本号可根据项目需求调整

3. 主线程执行网络请求导致致命异常

Android严格禁止在主线程执行网络操作,若直接同步调用getAllAmphibians()方法,会触发主线程阻塞的致命异常。

解决步骤:

  • 将ApiService的方法改为挂起函数(推荐方式):
interface AmphibiansApiService {
    @GET("amphibians")
    suspend fun getAllAmphibians(): List<Amphibian>
}
  • 在协程中调用接口方法,推荐结合ViewModel的viewModelScope:
// 在ViewModel内部
viewModelScope.launch(Dispatchers.IO) {
    try {
        val amphibians = amphibiansApiService.getAllAmphibians()
        withContext(Dispatchers.Main) {
            // 切换回主线程更新UI或处理数据
        }
    } catch (e: Exception) {
        // 捕获并处理异常
    }
}

4. 模型类与JSON结构不匹配

如果Amphibian类的字段名、类型与接口返回的JSON结构不匹配,也会导致序列化失败,触发转换器异常。

解决步骤:

  • 先通过浏览器或调试工具查看接口返回的JSON结构,示例结构如下:
[
  {
    "name": "Red-eyed Tree Frog",
    "type": "Frog",
    "description": "A small arboreal frog native to Central America..."
  }
]
  • 确保模型类字段与JSON键完全对应,字段名不一致时使用@SerializedName注解:
data class Amphibian(
    val name: String,
    val type: String,
    @SerializedName("description")
    val description: String
)

内容的提问来源于stack exchange,提问作者Ravikant sahu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:52:44