下面的代码只能运行一次。
class MainActivity : AppCompatActivity() {
lateinit var userLiveData: LiveData<List<User>>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
getUsers() //WORKING <---------
userLiveData.observe(this, Observer {
it.forEach { user ->
Log.i("TAG", user.name)
}
})
lifecycleScope.launch {
delay(5000) //Refresh the result
getUsers() //NOT WORKING <---------
}
}
private fun getUsers() {
val apiHelper = ApiHelper(RetrofitBuilder.apiService)
val mainRepository = MainRepository(apiHelper)
userLiveData = liveData {
val res = mainRepository.getUsers() //Suspend function
emit(res)
}
}
}
我第一次调用getUsers()
函数时,可以看到日志。但是后来我打电话给getUsers()
,屏幕上没有日志。
这意味着userLiveData.observe(
函数运行一次。
答案 0 :(得分:0)
您的LiveData可以引用MutableLiveData,您可以在其中发布内容
private val userMLD = MutableLiveData<List<User>>()
val userLiveData: LiveData<List<User>> = userMLD
和
private fun getUsers() {
val apiHelper = ApiHelper(RetrofitBuilder.apiService)
val mainRepository = MainRepository(apiHelper)
userMLD.postValue(mainRepository.getUsers())
}
答案 1 :(得分:0)
与其每次都创建一个LiveData,不如在协程中运行代码并使用新值更新LiveData。为此,您需要一个MutableLiveData:
class MainActivity : AppCompatActivity() {
private val userLiveData = MutableLiveData<List<User>>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
getUsers() //WORKING <---------
userLiveData.observe(this, Observer {
it.forEach { user ->
Log.i("TAG", user.name)
}
})
lifecycleScope.launch {
delay(5000) //Refresh the result
getUsers() //NOT WORKING <---------
}
}
private fun getUsers() {
val apiHelper = ApiHelper(RetrofitBuilder.apiService)
val mainRepository = MainRepository(apiHelper)
lifecycleScope.launch {
val users = withContext(Dispatchers.IO) {
mainRepository.getUsers() //Suspend function
}
userLiveData.value = users
}
}
}