代码之家  ›  专栏  ›  技术社区  ›  Gissipi_453

在android上使用架构组件将rxjava代码转换为新代码

  •  1
  • Gissipi_453  · 技术社区  · 7 年前

    在Kotlin Android上使用RxJava,我要做的是-

    我有一个函数来创建一个在IO线程中运行的位图。

    位图准备好后,我将它设置为主线程上的imageview。

    var observable : Observable<Bitmap> = Observable.just(makeBitmap(path))
    
    var observer:Observer<Bitmap> = io.reactivex.Observer<Bitmap>() {
                    fun onSubscribe(d: Disposable) {
                        disposable = d
                    }
                    fun onNext(bitmap) {
                       imageView.setImageBitmap(bitmap)
                    }
                    fun onError(e:Throwable) {
                    }
                    fun onComplete() {
                    }
                }
    
    observable.subscribeOn(Schedulers.io())
              .observeOn(AndroidSchedulers.mainThread())
              .subscribe(observer)
    

    我的问题是, 我们可以通过使用livedata和观察架构组件中的数据来实现类似的功能吗?

    基本上我想在主线上观察一些东西,但繁重的工作必须在单独的线上完成。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Levi Moreira    7 年前

    好吧,你可以吃这样的东西:

    var bitmapLiveData: MutableLiveData<Bitmap> = MutableLiveData()
    
    fun createBitmap(): LiveData<Bitmap> {
    
            var observable : Observable<Bitmap> = Observable.just(makeBitmap(path))
            val result = observable.subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe({
                        result ->
                        bitmapLiveData.postValue(result)
                    },{
                        error->
                        error.printStackTrace()
                    },{
                        //completed
                    })
    
            return bitmapLiveData
    
        }
    

    我把它放在一个可以被生命周期拥有者观察到的视图模型中:

     viewModel.createBitmap().observe(this, Observer { 
                it?.let { 
                    //result bitmap
                }
            })
    
    推荐文章