【问题标题】:Converting RxJava code to a new code using architecture components on Android使用 Android 上的架构组件将 RxJava 代码转换为新代码
【发布时间】:2018-05-31 14:56:35
【问题描述】:

在 Kotlin Android 上使用 RxJava,我在做什么 -

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

Bitmap 准备好后,我将其设置为主线程上的 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 并通过观察架构组件中的数据来实现这样的目标吗?

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

【问题讨论】:

标签: android kotlin rx-java2 android-architecture-components android-livedata


【解决方案1】:

嗯,你可以有这样的东西:

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

    }

我把它放在一个可以被 LifecycleOwner 观察到的视图模型中:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2015-03-02
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    相关资源
    最近更新 更多