У меня странная проблема с моим кодом.
Сценарий ... У меня есть список данных, я получаю их в Viewmodel и наблюдаю из фрагмента. Когда я впервые открываю свой фрагмент, все работает нормально. Но когда я возвращаюсь из другого фрагмента, LiveData не равно нулю. Итак, я проверил вот так:
if(liveData.getUser().getValue()!= null){
//here getName() does not null and I get the value from liveData
println(liveData.getUser().getName()) //this work
liveData.getUser().observe(lifeCycleOwner(),
Observer { user: User? ->{
//Here LiveData is null
}
})
}
else{
liveData.initiate()
LiveData.getUser.observe(//same as above)
}
Я наблюдаю в onViewCreated () . Я не знаю, почему LiveData.getValue () не имеет значения null, но LiveData.observe возвращает значение null.
Может ли кто-нибудь помочь мне с этим?
Edit ... Это мой UserViewmodel.class
class UserViewModel : ViewModel(){
private var userLiveData : LiveData<User>?= MutableLiveData<>()
fun initiate (){
userLiveData = UserRepository.getUserData()
}
fun getUser() : LiveData<User>{
Log.e("get called")
return userLiveData
}
}
Edit 2 Это мой UserRepository.class
class UserRepository {
private var userData : MutableLiveData<User>?= null
fun getUserData(): LiveData<User>{
retrieveUser()
return userData
}
fun retrieveUser (){
val names = arrayOf("user1","user2","user3","user4","user5")
for(name :String in names){
user = User()
user.setName(name)
userData.value = user
}
}
}