gpt4 book ai didi

android - 无法通过 Retrofit Coroutine api 调用获得响应

转载 作者:行者123 更新时间:2023-12-04 15:36:16 27 4
gpt4 key购买 nike

我正在尝试从 api 获取对实时数据的响应,但没有使用此代码调用请求。

class AuthActivityViewModel : ViewModel() {

var authResp: LiveData<ObjAuthResp> = MutableLiveData()

val repository = BaseRepository()

fun login(username: String, password: String) {
authResp = liveData(Dispatchers.IO) {
val resp = repository.login(username, password)
emit(resp)
}
}
}

但它适用于此代码。

class AuthActivityViewModel : ViewModel() {

val repository = BaseRepository()

var authResp = liveData(Dispatchers.IO) {
val resp = repository.login(username, password)
emit(resp)
}

}

API 服务

@POST("profile/pub/auth/login")
suspend fun login(@Body authReqBody : ObjAuthReqBody): ObjAuthResp

基础资源库

open class BaseRepository {

suspend fun login(username:String,password:String) = service.login(ObjAuthReqBody( username, password))
}

从 Activity 中调用

   btn_login.setOnClickListener {
viewModel.login(edt_username.text.toString(),
edt_password.text.toString())
}

最佳答案

回答我自己的问题,

问题在 authResp = liveData(Dispatchers.IO) {... 行这是在创建新的 LiveData,而旧的观察者在观察初始的 var authResp: LiveData<ObjAuthResp> = MutableLiveData() .所以,因为没有观察者监听新创建的 LiveData甚至没有打电话。

此代码有效

  var authResp = MutableLiveData<ObjAuthResp>()

fun login(username: String, password: String) {
viewModelScope.launch {
withContext(Dispatchers.IO) {
val resp = repository.login(username, password)
authResp.postValue( resp)

}
}
}

关于android - 无法通过 Retrofit Coroutine api 调用获得响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59659513/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com