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>(...); }
- 未解决的参考:LinearLayoutManager / RecyclerView
- Firebase-Firestore不能同时加载2个文档的信息
- 协议缓冲gradle支持Kotlin Android不工作?
- Java to Kotlin转换器和可空方法参数
- Gradle项目的自动库版本更新当前不受支持。 请手动更新您的build.gradle
- Firebase AdMob引发IncompatibleClassChangeError
- Android的工作室2.3总是挂出
- 在咖啡测试中,注解被kotlin忽略了吗?
- 升级到Android Studio 3.1后无法加载“com.android.builder.Version”类