Android LiveData:MutableData从不处于活动状态
我有以下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
实例,它应该使用GoogleApiClient
和GoogleApiClient
进行初始化,但这不是问题。 我想动态地设置它,让我的观察者被触发。
编辑 :添加调用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规则。
发现这个问题尚未解决,但有需要的配置,使其通过:
-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>(...); }