【发布时间】:2017-06-20 22:31:30
【问题描述】:
我有以下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)
【问题讨论】:
-
你能添加代码 sn-p 有
signInViewModel.googleApiClient.value = it行吗? -
当然……这是一个 RxJava 订阅。它没有什么特别之处,但它就在这里(也强调我已经调试过它并调用了回调。在 LiveData 中,观察者不被认为是活动的,因此不会被调用。
-
看到您在
SignInViewModel类中的代码流存在问题。您需要发布整个SignInViewModel课程。如果您不能放置所有代码,请在方法中删除您的业务登录,但保持方法流。根据您提供的信息,没有人可以提供解决方案。 -
我已经用你在帖子中看到的整个班级重现了这个错误。抱歉,
SignInViewModel已完成。 -
@Olinasc 只是想知道如何在不使用任何 ViewModel 工厂的情况下注入 billingApi
标签: android kotlin android-architecture-lifecycle