Returns null getrequest 改造 kotlin
Returns null getrequest retrofit kotlin
我的 viewmodel
中有此功能,我想通过 get 请求检索位置列表。
但是当我从片段中调用函数 fetchAllLocations
时,这个函数 returns 为空。但在 onResponse
方法中,列表位置不为空。我不知道为什么 locations 在 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
}
}
Retrofit 运行 async processes ,所以你实际上返回了你的列表的初始值 null ,所以你需要使用 LiveData ,它是 Android Jetpack 的一部分并且它使用class观察者class观察数据的变化,你可以在你的案例中注册一个观察者并观察它的值的变化,当这种情况发生时你可以实际使用该数据。
更多信息,可以查看官方docs
在您的视图模型中添加此实时数据
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) {}
})
}
}
观察您片段中的实时数据 class。
viewModel.locationLiveData.observe(viewLifecycleOwner, Observer {
//here you will get list
})
参考项目:https://github.com/droiddevgeeks/MovieSearch (Java)
https://github.com/droiddevgeeks/TrendingRepo(科特林)
我的 viewmodel
中有此功能,我想通过 get 请求检索位置列表。
但是当我从片段中调用函数 fetchAllLocations
时,这个函数 returns 为空。但在 onResponse
方法中,列表位置不为空。我不知道为什么 locations 在 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
}
}
Retrofit 运行 async processes ,所以你实际上返回了你的列表的初始值 null ,所以你需要使用 LiveData ,它是 Android Jetpack 的一部分并且它使用class观察者class观察数据的变化,你可以在你的案例中注册一个观察者并观察它的值的变化,当这种情况发生时你可以实际使用该数据。 更多信息,可以查看官方docs
在您的视图模型中添加此实时数据
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) {}
})
}
}
观察您片段中的实时数据 class。
viewModel.locationLiveData.observe(viewLifecycleOwner, Observer {
//here you will get list
})
参考项目:https://github.com/droiddevgeeks/MovieSearch (Java) https://github.com/droiddevgeeks/TrendingRepo(科特林)