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

使用Coroutines+Retrofit拉取数据时报ClassNotFoundException的问题

报错问题修复方案

根因定位

你遇到的ClassNotFoundException触发在OkHttpClient初始化环节,是OkHttp依赖版本不兼容、依赖缺失导致的类加载失败,和协程、Retrofit的业务逻辑无关。

具体修复步骤

  • 第一步:统一项目依赖版本,避免版本冲突
    打开Module级别的build.gradle文件,确保Retrofit、OkHttp版本匹配,参考配置如下:
    dependencies {
        // Retrofit核心 + Gson解析器,版本保持一致
        implementation 'com.squareup.retrofit2:retrofit:2.9.0'
        implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
        // OkHttp核心 + 可选日志拦截器,版本保持一致,和上述Retrofit版本兼容
        implementation 'com.squareup.okhttp3:okhttp:4.9.3'
        implementation 'com.squareup.okhttp3:logging-interceptor:4.9.3'
        // 协程Android依赖
        implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
    }
    
  • 第二步:清理缓存重新构建
    依次点击Android Studio顶部菜单栏 Build -> Clean Project -> Build -> Rebuild Project,如果还是报错可以删除项目根目录下的.gradle文件夹后重新同步Gradle。
  • 第三步:修正代码隐含问题(避免修复完类找不到后又触发其他报错)
    1. ApiService接口的@GET注解多了开头的斜杠,baseUrl已经以/结尾,拼接时会把v1路径覆盖,改成:
      @GET("forecast.json") // 去掉开头的/
      suspend fun getUserDetails(@Query("key") key:String,
                        @Query("q") q:String,
                        @Query("days") days: Int,
                        @Query("aqi") aqi : String,
                        @Query("alerts") alerts:String
      ) : Response<ResponseDTO>
      
    2. 你定义的days参数值为0,调用接口时只会返回当天的预报数据,forecast.forecastday数组长度只有1,但你代码里取了索引为1的元素,会触发数组越界,把days的值改成≥2即可。
    3. MainActivity继承的MainScope需要在onDestroy生命周期调用cancel(),避免协程内存泄露:
      override fun onDestroy() {
          super.onDestroy()
          cancel()
      }
      

内容的提问来源于stack exchange,提问作者Saveen Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:24:04