返回 null getrequest 改造 kotlin

问题描述

我的 viewmodel 中有此函数,我想通过 get 请求检索位置列表。 但是当我从片段中调用函数 fetchAllLocations 时,该函数返回 null。但在 onResponse 方法中,列表位置不为空。我不知道为什么位置在 onResponse 方法之外为空。

      fun fetchAllLocations(): List<Location>?
            {
        
                val call = apiInterface?.fetchAllLocation()
                var locations: List<Location>?  = null
        
                call?.enqueue(object : Callback<List<Location>> {
        
                    override fun onResponse(call: Call<List<Location>>,response: Response<List<Location>>) {
                        locations = response.body()
        
        
        
                    }
        
                    override fun onFailure(call: Call<List<Location>>,t: Throwable) {
                        
                    }
                })
                return locations
            }
        }

解决方法

在您的视图模型中添加此实时数据

   val locationLiveData by lazy { MutableLiveData<<List<Location>>() }
        
    fun fetchAllLocations(){
            
                    val call = apiInterface?.fetchAllLocation()
                    call?.enqueue(object : Callback<List<Location>> {
            
                        override fun onResponse(call: Call<List<Location>>,response: Response<List<Location>>) {
                            locations = response.body()
                            locationLiveData.postValue(locations)
                        }
            
                        override fun onFailure(call: Call<List<Location>>,t: Throwable) {}
                    })
                }
   }

从您的片段类中观察此实时数据。

viewModel.locationLiveData.observe(viewLifecycleOwner,Observer {
            //here you will get list
        })

参考项目:https://github.com/droiddevgeeks/MovieSearch (Java) https://github.com/droiddevgeeks/TrendingRepo(科特林)

,

Retrofit run async processes ,所以你实际上返回了你的列表的初始值 null ,所以你需要使用 LiveData ,它是 Android Jetpack 的一部分,它使用类 Observer 类来观察数据的变化,您可以在您的案例中注册一个观察者并观察其值的变化,当发生这种情况时,您可以实际使用该数据。 更多信息可以查看官方docs

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...