1

我有以下内容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在示例中使用了一个实例,并且应该使用带有 automanage 之类的 Activity 对其进行初始化,但这不是这里的问题。我想动态设置它并触发我的观察者。

编辑:添加调用 setValue 的代码

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

1 回答 1

1

事实证明minifyEnabled是真的。我还没有看到有关架构组件的 proguard 规则的任何信息。

发现此问题尚未解决,但具有使其通过所需的配置:

-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>(...);
}
于 2017-06-22T02:01:35.340 回答