我有一个应用程序,用户可以在其中提供一些数据。检查提供的数据是否有效后,应用程序应执行 api 调用,然后显示响应。用户可以多次执行。
更具体地说 - 假设我们有一个编辑文本和按钮。用户在编辑文本中提供一些数据,然后单击
button
。如果 EditText
中提供的数据有效,则使用提供的数据执行 api 调用,并将其显示在 TextView
中。
ProgressBar
在 setOnClickListener
中的 button
内可见。进行api调用后,从LiveData
观察ViewModel
,并将其显示在TextView
中,ProgressBar
设置为INVISIBLE
。到目前为止,一切都按预期进行。现在,当用户决定稍微更改数据并执行另一个 api 调用时,ProgressBar
将不会显示。
按钮
myBinding.apiCall.setOnClickListener {
myBinding.TestProgressBar.visibility = View.VISIBLE
TestJob.start()
}
工作
private val TestJob: Job
get() = viewLifecycleOwner.lifecycleScope.launch(start = CoroutineStart.LAZY) {
TestVM.MakeApiCall()
TestVM.ApiResponse.observe(viewLifecycleOwner, Observer { apiresult ->
when (apiresult) {
is TestWrapper.Success -> {
myBinding.MyTextView.text = String.format(
getString(R.string.testString),
it
)
myBinding.TestProgressBar.visibility = View.INVISIBLE
}
is TestWrapper.Error -> {}
}
})
}
我尝试在
delay
中制作一个Observable
,然后ProgressBar
出现了。怎么可能,第一次出现之后,就不再出现了。
每次点击,您都会启动全新的协程,它将永远观察 ApiResponse*。
第二次点击时:
还有更多要说的,但这是要点。