使用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。 - 第三步:修正代码隐含问题(避免修复完类找不到后又触发其他报错)
- 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> - 你定义的
days参数值为0,调用接口时只会返回当天的预报数据,forecast.forecastday数组长度只有1,但你代码里取了索引为1的元素,会触发数组越界,把days的值改成≥2即可。 - MainActivity继承的
MainScope需要在onDestroy生命周期调用cancel(),避免协程内存泄露:override fun onDestroy() { super.onDestroy() cancel() }
- ApiService接口的
内容的提问来源于stack exchange,提问作者Saveen Khan
相关产品推荐
相关产品推荐

