我在服务器上运行了很长时间,因此应用必须显示进度百分比。但是用户必须可以随时停止操作。
服务器调用的retrofit2定义:
interface FooRemoteService {
@POST("/foos")
fun postFoos(@Body foos: List<FooPojo>): Observable<Response<List<String>>
}
雇用是我发现的简化版本。
一次性变量在片段中定义
var disposable: Disposable? = null
当单击开始按钮时,应用程序会从可迭代开始观察并显示进度并将值分配给一次性变量
startButton.setOnClickListener {
disposable = Observable.fromIterable(chunkedList)
.flatMap { fooRemoteService.postFoos(it) }
.subscribeOn(Schedulers.computation())
.doOnDispose { Log.d("TAG", "end! due to dispose") }
.subscribe(
{ Log.d("TAG", "progress") },
{ Log.e("TAG", it.message) },
{ Log.d("TAG", "end!") }
)
}
当单击“取消”按钮时,应用程序尝试在由一次性变量引用的任何对象上调用dispose():
cancelButton.setOnClickListener { 一次性的?.pose() Log.d(“ TAG”,“ dispose!”) }
它有效,但我怀疑:这是一个好方法吗?使用变量来访问应被取消的操作?在这种情况下,dispose()是取消的正确方法吗?