首页 > 解决方案 > 无法在带有 Kotlin 的 Android 中使用 Autodispose

问题描述

我试图使用 AutoDispose https://github.com/uber/AutoDispose在 android 中处理我的 Rx 流。

但是当我将它添加到我的活动/片段时遇到问题。我认为这是一个 kotlin 问题,但我无法弄清楚是什么。

当我添加时AndroidLifecycleScopeProvider.from(lifecycle),Android Studio 中的 from 方法出现错误,并且无法编译。

这是堆栈跟踪

None of the following functions can be called with the arguments supplied: 
public final fun from(p0: (() -> Lifecycle)!): AndroidLifecycleScopeProvider! defined in com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider
public open fun from(p0: Lifecycle!): AndroidLifecycleScopeProvider! defined in com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider
public open fun from(p0: LifecycleOwner!): AndroidLifecycleScopeProvider! defined in com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider

相同的代码适用于那里的示例应用程序。

标签: androidkotlinrx-java2rx-androidautodispose

解决方案


我遇到了同样的问题,这是由于 Lifecycle 包 Androidx 支持和以前的 v7 支持的兼容性,它们在包工件命名方面有所不同。

AndroidX
迁移
例如:工件命名:

com.android.support:appcompat-v7 -> androidx.appcompat:appcompat:1.0.0

AppCompatActivity 实现了 LifecycleOwner,这是 AutoDispose 工作的动力,但在最新版本的 AutoDispose 中,他们使用 AndroidX 代替(参见 AndroidLifecycleScopeProvider.from(LifecycleOwner owner) 'LifecycleOwner' ),因此如果您使用非 Androidx,则所有者不能被视为正确类型使用 AutoDispose v1.1.0(AFAIK AutoDispose v0.8.0 适用于 com.android.support:appcompat-v7:28.0.0)</p>

因此,您可以使用将您的应用迁移到 AndroidX迁移指南或使用旧版本的 AutoDispose。请参阅mvnrepository 上的 AutoDispose

关于更改,请参阅更改日志https://github.com/uber/AutoDispose/blob/master/CHANGELOG.md#version-100,v1.0.0 及更高版本依赖于AndroidX,v1.0.0-RC3 应该是我们的选择.

版本 1.0.0 2018-10-10 稳定发布!这在功能上与 1.0.0-RC3 相同,但完全迁移到了新的 AndroidX 工件。从现在开始,对于 Android 项目,您必须使用 AndroidX 工件。如果需要,您可以使用 1.0.0-RC3 来简化迁移。

编辑:如果您想要 RxKotlin 之类的扩展,请复制:https ://github.com/uber/AutoDispose/blob/master/sample/src/main/kotlin/com/uber/autodispose/recipes/subscriberproxies.kt


推荐阅读