安卓实时数据 : MutableData is never on active state

标签 android kotlin android-architecture-lifecycle

我有以下 ViewModel:

class SignInViewModel @Inject constructor(val api: BillingApi) : ViewModel() {
    val googleApiClient: MutableLiveData<GoogleApiClient> = MutableLiveData()
}

在我的 Activity.onCreate(onSavedInstanceState: Bundle?) 我有:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    signInViewModel = ViewModelProviders.of(this)
            .get(SignInViewModel::class.java)

    signInViewModel.googleApiClient.observe(this, Observer<GoogleApiClient?> {
        ... // here never gets trigged
    }

稍后在我的代码中我有 signInViewModel.googleApiClient.value = it。此时(点击按钮后发生,所以我处于恢复状态)我希望 LiveData 触发我的观察者,但它没有

在调试时我注意到我的 MutableLiveData 从未处于 active 状态。

我做错了什么?拜托,我知道我在示例中使用的是 GoogleApiClient 实例,并且应该使用具有自动管理功能的 Activity 初始化它,但这不是这里的问题。我想动态设置它并触发我的观察者。

编辑:添加调用setValue的代码

signInViewModel.someMethod(this)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(Consumer {
                // This gets called but the observe callback does **not**
                signInViewModel.googleApiClient.value = it
            }, errorCallback)

最佳答案

原来 minifyEnabled 是真的。我还没有看到任何关于架构组件的 proguard 规则。

找到这个 issue尚未解决,但具有使其通过所需的配置:

-keepclassmembers class * implements android.arch.lifecycle.LifecycleObserver {
    <init>(...);
}
-keepclassmembers class * extends android.arch.lifecycle.ViewModel {
    <init>(...);
}
-keepclassmembers class android.arch.lifecycle.Lifecycle$State { *; }
-keepclassmembers class android.arch.lifecycle.Lifecycle$Event { *; }
-keepclassmembers class * {
    @android.arch.lifecycle.OnLifecycleEvent *;
}

-keep class * implements android.arch.lifecycle.LifecycleObserver {
    <init>(...);
}

关于安卓实时数据 : MutableData is never on active state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44664027/

相关文章:

android - 是否可以发送带有 Intent 的自定义对象作为 Extra

android - Google Play 服务库更新和缺少符号 @integer/google_play_services_version

java - 如何在 Android 应用程序中实现股票图表?

android-architecture-components - 强制分页库数据源刷新

android - 过滤由 View 模型的 LiveData 条目填充的回收器 View

android - 为什么get_capture_delay包含rsmp_delay,

android - Dagger 组件 : error: cannot find symbol kotlin classes

android - Kotlin:EditText 在 afterTextChanged() 中为空

kotlin 将函数作为参数传递时类型不匹配,必需 : ()->Unit, 找到:单位

android - 奇怪的 LiveData 行为与 ObservableField