gpt4 book ai didi

android - 在执行改造回调之前,方法返回null值

转载 作者:行者123 更新时间:2023-12-02 13:11:41 24 4
gpt4 key购买 nike

在Android开发中使用MVVM模式时,我们创建一个存储库类,在其中执行所有网络请求。问题在于,因为改造的.enqueue()方法是异步的,所以我的调用.enqueue的方法不会等到获得回调(这很合逻辑)并返回null。
解决此问题的一种方法是将MutableLiveData对象传递给我的存储库方法,并在回调中设置其值,但是我不想在我的view(fragment)中观察所有ViewModel属性。
解决此问题的常用方法是什么?

fun createRoute(newRoute: RouteToSend): String {
var responseMessage: String? = null
webService.createRoute(authToken!!, newRoute).enqueue(object: Callback<Message> {
override fun onFailure(call: Call<Message>, t: Throwable) {
Log.e(TAG, t.message!!)
}

override fun onResponse(call: Call<Message>, response: Response<Message>) {
response.body()?.let { responseMessage = it.message }
}
})
return responseMessage!!
}

最佳答案

是的,使用MutableLiveData是一种方法,另一方面,使用回调机制是另一种更合适的方法。
如果您想使用回调,则可以更改方法,例如

fun createRoute(newRoute: RouteToSend, callback : (String?) -> Unit): String {
var responseMessage: String? = null
webService.createRoute(authToken!!, newRoute).enqueue(object: Callback<Message> {
override fun onFailure(call: Call<Message>, t: Throwable) {
Log.e(TAG, t.message!!)
callback(responseMessage)
}

override fun onResponse(call: Call<Message>, response: Response<Message>) {
response.body()?.let { responseMessage = it.message
callback(responseMessage)}
}
})

}

然后您可以像这样调用createRoute方法
createRoute(route_to_send_variable, 
callback = {
it?.let {
// use the response of your createRoute function here
}
})

关于android - 在执行改造回调之前,方法返回null值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60966140/

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