Android LiveData:MutableData 永远不会处于活动状态
Android LiveData: MutableData is never on active state
我有以下 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 和 automanage 等等进行初始化,但这不是这里的问题。我想动态设置它并触发我的观察者。
编辑:添加调用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>(...);
}
我有以下 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 和 automanage 等等进行初始化,但这不是这里的问题。我想动态设置它并触发我的观察者。
编辑:添加调用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>(...);
}