簡體   English   中英

Android Kotlin Retrofit,在suspend外等待響應

[英]Android Kotlin Retrofit, wait for response outside suspend

我遇到了需要調用端點並在繼續流程之前等待響應的情況

可悲的是,我不能讓 function “暫停”,因為它需要大量的重構,我更願意“破解”一次

我試過等待事件信號,等待一個值,使用帶有'await()'的RunBlocking,沒有工作,並且等待永遠不會回火(使用.enqueue()時收到響應)

我只需要這個工作,我不介意 UI 凍結、用戶等待或代碼丑陋。 有 2 秒的超時,這是我願意做出的犧牲

我不是 android(或 ios)開發人員,所以我很高興得到任何提示

附上我的代碼:

API接口

import com.google.gson.annotations.SerializedName
import retrofit2.Call
import retrofit2.http.Body
import retrofit2.http.POST

interface ITaxForAddressApi {
    @POST("/myapi")
    fun getTaxForAddress(@Body body: TaxForAddressBodyRequest): Call<TaxRateEntity>
}

data class TaxForAddressBodyRequest(
    @SerializedName("address") val address: TaxForAddressBodyAddress
)

data class TaxForAddressBodyAddress(
    @SerializedName("streetAddress") val streetAddress: String,
    @SerializedName("city") val city: String,
    @SerializedName("state") val state: String,
    @SerializedName("zip") val zip: String,
    @SerializedName("country") val country: String
)

data class TaxRateEntity(@SerializedName("tax") val taxRate: Double)

調用代碼:

val addressBody = 
    TaxForAddressBodyAddress(
        shippingAddress.street,
        shippingAddress.city,
        shippingAddress.state,
        shippingAddress.zipCode,
        shippingAddress.country
        )
val taxRequest = TaxForAddressBodyRequest(addressBody)


val taxApiRequest = taxForAddressApi.getTaxForAddress(taxRequest)
taxApiRequest.enqueue(SafeCallback(object : CallbackResponseListener<TaxRateEntity> {
            override fun onSuccess(response: TaxRateEntity) {
                'Do Something here'
            }

            override fun onFailure(t: Throwable) {
                'Alert'
            }
        }))
}

嘗試使用 runBlocking(當然使用 try-catch):

runBlocking {
    val tax = taxForAddressApi.getTaxForAddress(taxRequest).await()
}

Retrofit 的Call有一個execute()方法,如果您可以阻止調用線程並且需要同步獲取響應,則可以調用該方法。 請記住,您可能需要禁用StrictMode ,這會在默認情況下引發NetworkOnMainThreadException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM