当我使用协程使用改造库发出请求时,出现错误。
Error -> FATAL EXCEPTION: DefaultDispatcher-worker-1
Process: com.example.retro, PID: 31210
java.lang.IllegalArgumentException: Unable to create call adapter for class java.lang.Object
for method QuotesApi.getQuotes
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:720)
at retrofit2.ServiceMethod$Builder.createCallAdapter(ServiceMethod.java:234)
at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:160)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:166)
at retrofit2.Retrofit$1.invoke(Retrofit.java:145)
at java.lang.reflect.Proxy.invoke(Proxy.java:913)
at $Proxy0.getQuotes(Unknown Source)
at com.example.retro.MainActivity$onCreate$1.invokeSuspend(MainActivity.kt:24)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:749)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for class java.lang.Object.
Tried:
* retrofit2.ExecutorCallAdapterFactory
at retrofit2.Retrofit.nextCallAdapter(Retrofit.java:237)
at retrofit2.Retrofit.callAdapter(Retrofit.java:201)
at retrofit2.ServiceMethod$Builder.createCallAdapter(ServiceMethod.java:232)
... 12 more
我的服务文件(接口)
package com.example.retro
import retrofit2.Response
import retrofit2.http.GET
import retrofit2.http.Query
interface QuotesApi {
@GET("quotes")
suspend fun getQuotes(@Query("page")page:Int):Response<QuotesList>
}
我的 RetrofitHelper 对象文件
package com.example.retro
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object RetrofitHelper {
val BASE_URL = "https://quotable.io/"
fun getInstance():Retrofit{
return Retrofit.Builder().baseUrl(BASE_URL).
addConverterFactory(GsonConverterFactory.create()).build()
}
}
主要活动文件
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val quotesApi = RetrofitHelper.getInstance().create(QuotesApi::class.java)
GlobalScope.launch {
val result = quotesApi.getQuotes(1)
if (result != null){
d("rty",result.body().toString())
}
}
}
您遇到的错误“致命异常:DefaultDispatcher-worker-1”是一条通用错误消息,不提供有关该问题的具体信息。您需要收集有关错误的更多信息来诊断和解决问题。您可以采取以下一些步骤来解决问题:
-检查 Logcat:
1- 打开 Android Studio。 2- 转到“视图”>“工具窗口”>“Logcat”以打开 Logcat 面板。 3- 通过应用程序的包名称或搜索错误消息来过滤 logcat 消息。
-查找详细的错误消息:
在 Logcat 中,查找更详细的错误消息或堆栈跟踪,其中提供有关问题根本原因的信息。这将帮助您确定具体问题。
-检查拼写错误和 URL:
仔细检查您在 Retrofit 界面中使用的 URL 端点。确保 URL 格式没有拼写错误或问题。 确保端点可访问,并在通过 Web 浏览器或 Postman 等工具访问时返回预期数据。
-正确处理改造响应:
确保您在协程代码中正确处理 Retrofit 响应和错误。使用 try-catch 块捕获网络请求期间可能发生的任何异常。
处理改造示例:
try {
val response = quotesApi.getQuotes(page)
if (response.isSuccessful) {
val quotesList = response.body()
// Handle the successful response here
} else {
// Handle the error response here (e.g., non-2xx status code)
}
} catch (e: Exception) {
// Handle exceptions (e.g., network errors) here
}