我使用LiveDatareActiveStreams.FromPublisher()
库在代码中使用了大量转换为LiveData
的RxJavaObservables
。所以我想在RxJava Observable中添加一个扩展函数,以便轻松地将它们转换为livedata
。
这些是我的扩展函数:
fun <T> Flowable<T>.toLiveData() : LiveData<T> {
return LiveDataReactiveStreams.fromPublisher(this)
}
fun <T> Observable<T>.toLiveData(backPressureStrategy: BackpressureStrategy) : LiveData<T> {
return LiveDataReactiveStreams.fromPublisher(this.toFlowable(backPressureStrategy))
}
fun <T> Single<T>.toLiveData() : LiveData<T> {
return LiveDataReactiveStreams.fromPublisher(this.toFlowable())
}
fun <T> Maybe<T>.toLiveData() : LiveData<T> {
return LiveDataReactiveStreams.fromPublisher(this.toFlowable())
}
fun <T> Completable.toLiveData() : LiveData<T> {
return LiveDataReactiveStreams.fromPublisher(this.toFlowable())
}
附注。
我刚认识Kotlin所以我想问这些问题。如有任何帮助,我们将不胜感激。非常感谢。
简而言之:
flowable.ToLiveData()
已在AndroidX中。lifecycle:lifecycle-reactivestreams-ktx
项目Observable.ToLiveData()
应该很有用single.toLiveData()
在实践中可能没有用处可能.ToLiveData()
在实践中可能不有用completable.ToLiveData()
实际上没有意义我觉得这是个不错的主意。LiveData
的一个优点是可以直接在数据绑定布局中使用它。假设在您拥有的视图模型中:
val user: LiveData<User>
data class User(val firstName: String, val lastName: String)
android:text="${viewModel.user.firstName}"
binding.setLifecycleOwner(this)
从反应流转换为实时数据时有一些考虑(就像我想在循环后恢复倒计时时那样),但我不认为它们与您提供的扩展函数有关,这些函数似乎起到了作用。这里要记住的问题是,当生命周期所有者从活动状态移动到非活动状态时,publisherlivedata
取消对流的订阅,而当状态更改为活动状态时,它将创建一个新的订阅,这意味着在许多情况下重新启动流(我猜是在流为“冷”的情况下),而您可能希望在循环或其他配置更改后从原来的位置恢复流。另一方面,如果流是“热”的,则在非活动状态期间会忽略排放。我认为这个问题必须解决,即使您直接使用反应流和手动处理生命周期。但问题是,仅仅将反应流转换为livedata
并不足以解决这个问题。
将这些方法记录为不处理错误状态是很好的,错误状态必须在上游处理。或者,这可能是这些函数的改进之一--首先转换流以处理错误(例如,作为带有默认值的lambda参数)。另一种可能是使用result
(目前是实验性的),或者类似于封装成功或错误的东西。
作为事后的思考,关于我上面写的这部分:
从反应流转换为活动数据时有一些考虑因素,但我认为它们与您呈现的扩展函数无关。
我仍然认为它在一般情况下是正确的,但是我不确定您是否真的希望在实践中大多数时候使用single.toLiveData()
和maybe.toLiveData()
。由于maybe
和single
是对一次性操作进行建模,因此在没有活动观察者时最好不要取消它,而在有新的活动观察者时必须重新启动它。相反,发布到一些mutablelivedata
并在oncleared
中处理single
/maybe
可能是有用的(我不确定是否可以封装在扩展函数中)。它们仍然可能有一些用处,但我现在根本看不出来。
顺便说一下,您的flowable.tolivedata()
已经在androidx.lifecycle:lifecycle-reactivestreams-ktx
工件中。
这使得Observable.ToLiveData()
,我认为它应该和flowable
一样有用。
最近,我开始将我的Android项目从Java转换为Kotlin。我在许多类中使用改型从API获取数据。在我的项目中,有很多POJO,我需要手动将它们转换为数据类,因为它与AndroidStudio的自动转换器工具不兼容。 假设我有模型类: 在Kotlin中有没有什么好方法可以直接将这个模型类转换为数据类?这个类可以手动转换,但我有一些类有大量的变量,手动将其转换为数据类会很麻烦。
我正在尝试使用具体化类型的函数作为扩展函数,但我认为这是不可能的,因为在我检查生成的字节码后,我发现方法签名是私有的,有什么办法可以将其公开? CommonExtensions.kt 静态编程语言字节码: 客户代码: 静态编程语言文件 Java档案
数据类似乎是Java中老式POJO的替代品。这些类将允许继承是可以预期的,但我看不到扩展数据类的方便方法。我需要的是这样的东西:
我试着把我的头绕在可观察的物体上。我喜欢Observable解决开发和可读性问题的方式。正如我读到的,好处是巨大的。 HTTP和集合上的可观察对象似乎是直截了当的。我怎样才能把这样的东西转换成可观察的模式呢。 这来自我的服务组件,用于提供身份验证。我希望它能像Angular2中的其他HTTP服务一样工作——支持数据、错误和完成处理程序。 这里的任何帮助都将不胜感激。我唯一的替代解决方案是创建s。但
我尝试为 以下是我的尝试: 问题是IntelliJ抱怨无法智能转换my变量(这是和) 会有一条红色的弯弯曲曲的线,并抱怨它不能智能投射。所以我必须使用 如果你不能复制它,不要担心,我有很多代码——这些是重要的部分。 不同之处在于,像这样的常规方法不需要此位置中的Smart cast。 这意味着我没有在扩展函数中正确实现一些东西。 有人知道我如何修复扩展函数,这样我就不需要使用
我有以下两个场景共享的前奏代码: 现在,我想将df转换为pyspark数据帧(