如何在可观察的rx上执行取消操作?

时间:2018-09-01 08:06:08

标签: android kotlin rx-java2 dispose

我在服务器上运行了很长时间,因此应用必须显示进度百分比。但是用户必须可以随时停止操作。

服务器调用的retrofit2定义:

interface FooRemoteService {
    @POST("/foos")
    fun postFoos(@Body foos: List<FooPojo>): Observable<Response<List<String>>
 }

雇用是我发现的简化版本。

  1. 一次性变量在片段中定义

    var disposable: Disposable? = null

  2. 当单击开始按钮时,应用程序会从可迭代开始观察并显示进度并将值分配给一次性变量

    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!") }
             )
     }
    
  3. 当单击“取消”按钮时,应用程序尝试在由一次性变量引用的任何对象上调用dispose():

    cancelButton.setOnClickListener {     一次性的?.pose()     Log.d(“ TAG”,“ dispose!”) }

它有效,但我怀疑:这是一个好方法吗?使用变量来访问应被取消的操作?在这种情况下,dispose()是取消的正确方法吗?

0 个答案:

没有答案