retrofit关于Android网络请求中Call<>和挂起函数使用的困惑

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

在搜索我的函数 fun getRestaurants(): Call 无法暂停的错误答案后,我发现 在这个问题 中,您不能将暂停的函数与 Call<> 返回结合起来,并且我的问题解决了。但是,我仍然不完全理解何时使用 Call<> 以及何时暂停函数,至少在我向 API 发出 @GET 和 @POST 请求的上下文中,据我所知有一个输入和输出数据,所以最好使用暂停功能,但在这种情况下调用的目的是什么。

interface RestaurantsApiService {
@GET("restaurants?populate=*")
fun getRestaurants(): Call<Restaurants>
}

interface RestaurantsApiService {
@GET("restaurants?populate=*")
suspend fun getRestaurants(): Restaurants
}

目前,在我的应用程序中,我正在使用 Call,因为我正在学习的书确实如此,虽然它后来将 Call 更改为暂停功能,但它并没有真正解释这样做的原因或好处是什么。

我知道并理解为什么要使用协程以及如何处理协程,当我在另一个函数/val 等中调用 getRestaurants() 时我可以做到这一点,但我的疑问恰恰在于 getRestaurants().

android kotlin retrofit retrofit2
1个回答
0
投票

Call 适用于你根本不使用协程的情况。它主要用于纯 Java 项目。如果你正在使用协程,那么使用它是没有意义的,除非你正在处理一个遗留项目,其中有一些模块还没有使用协程。然后您可以使用 Call 并在协程中调用

await()
以暂停、同步的方式获得结果。

© www.soinside.com 2019 - 2024. All rights reserved.