当我使用 Coroutines 进行改造时出现错误(无法创建调用适配器)

问题描述 投票:0回答:1

当我使用协程使用改造库发出请求时,出现错误。

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())
        }
    }

}
android kotlin retrofit kotlin-coroutines
1个回答
0
投票

您遇到的错误“致命异常: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
}
© www.soinside.com 2019 - 2024. All rights reserved.