kotlin 在< T>改造中使用Call对象和suspend函数有什么区别?

bttbmeg0  于 2022-11-16  发布在  Kotlin
关注(0)|答案(2)|浏览(202)

我是第一次使用Kotlin。我可以用这两种方式调用api。它们之间有什么区别?
具有暂停功能。

interface RetrofitInterface {
            @GET("/posts")
            suspend fun getUserData(): Response<List<User>>
        }

我将使用val result = apiCaller.getUserData()调用我的api
使用Call〈〉对象

interface RetrofitInterface {
    @GET("/posts")
    fun getUserDataWithCall(): Call<User>
    }

将通过

val result2 = apiCaller.getUserDataWithCall().enqueue(object :Callback<User>{
        override fun onResponse(call: Call<User>, response: Response<User>) {}

        override fun onFailure(call: Call<User>, t: Throwable) {}
         })
9wbgstp7

9wbgstp72#

通过使用Call〈〉,你可以使Retrofit请求和响应异步--使用call.enqueue。这是最好的方法,因为网络调用可能会花费一段时间并阻塞主线程。
不使用Call<>:-在这种情况下,网络操作将在主线程上执行,这将导致阻塞主线程。因此,为了使网络调用异步,我们将其标记为挂起函数,以便在协程中同步使用时,主线程不会被阻塞。

相关问题