观察 MutableLiveData 时出错
Error while observing MutableLiveData
我正在开发 MVVM 应用程序。我已经能够一起使用 AndroidViewModel、Activity 和 MutableLiveData,但我不知道为什么我对这个特定方法有问题。
例如,我有一个名为 "IssuesViewModel" 的 AndroidViewModel。它有一个 private MutableLiveData<Boolean> mutable;
和这两个方法:
// Retrofit 2 call
public void reportIssue(Data data){
mutable = new MutableLiveData();
retrofit.reportIssue(Data data, new RestCallback<Void>(){
@Override
public void success(Void success){
mutable.setValue(true);
}
@Override
public void failure(){
mutable.setValue(false);
}
);
}
// Getting mutableLiveData
public MutableLiveData<Boolean> getMutable(){
return mutable;
}
现在,在我的 "IssuesActivity" 中,即扩展 AppCompatActivity
和实现 LifecycleRegistryOwner
,我有以下方法:
//... Activity callbacks and other methods ...
private IssuesViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState)
// Toolbar code and other stuff...
viewModel = ViewModelProviders.of(this).get(IssuesViewModel.class);
// More code ...
}
@Override
public LifecycleRegistry getLifecycle() {
return new LifecycleRegistry(this);
}
// Triggered after button click
private void reportIssue(Data data){
viewModel.reportIssue(data);
viewModel.getMutable().observe(this, new Observer<Boolean>(){
@Override
public void onChanged(@Nullable Boolean response){
if (response != null && response){
//Success, update UI
} else {
//Error, update UI
}
}
}
我以前能够使用 mutableLiveData(使用自定义对象而不是布尔值)。我对之前的所有电话都做了同样的事情......我不知道为什么这不起作用。
谢谢!
编辑 1,11 月 21 日:
我认为问题在于我的 activity 扩展了 AppCompatActivity
并实现了 LifecycleRegistryOwner
。我有一个 Activity,其代码与上述代码类似,一切正常,但 Activity 正在扩展 LifecycleActivity
。当我更改此 activity、扩展 AppCompatActivity
和实施 LifecycleRegistryOwner
时,观察者的 onChange 永远不会触发 。我发现这个 bug 与我的问题有关,但我认为它只适用于 Fragments...
更新android.arch.lifecycle:extensions
至稳定版1.0.0后,该问题已解决。现在,一切正常。
我正在开发 MVVM 应用程序。我已经能够一起使用 AndroidViewModel、Activity 和 MutableLiveData,但我不知道为什么我对这个特定方法有问题。
例如,我有一个名为 "IssuesViewModel" 的 AndroidViewModel。它有一个 private MutableLiveData<Boolean> mutable;
和这两个方法:
// Retrofit 2 call
public void reportIssue(Data data){
mutable = new MutableLiveData();
retrofit.reportIssue(Data data, new RestCallback<Void>(){
@Override
public void success(Void success){
mutable.setValue(true);
}
@Override
public void failure(){
mutable.setValue(false);
}
);
}
// Getting mutableLiveData
public MutableLiveData<Boolean> getMutable(){
return mutable;
}
现在,在我的 "IssuesActivity" 中,即扩展 AppCompatActivity
和实现 LifecycleRegistryOwner
,我有以下方法:
//... Activity callbacks and other methods ...
private IssuesViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState)
// Toolbar code and other stuff...
viewModel = ViewModelProviders.of(this).get(IssuesViewModel.class);
// More code ...
}
@Override
public LifecycleRegistry getLifecycle() {
return new LifecycleRegistry(this);
}
// Triggered after button click
private void reportIssue(Data data){
viewModel.reportIssue(data);
viewModel.getMutable().observe(this, new Observer<Boolean>(){
@Override
public void onChanged(@Nullable Boolean response){
if (response != null && response){
//Success, update UI
} else {
//Error, update UI
}
}
}
我以前能够使用 mutableLiveData(使用自定义对象而不是布尔值)。我对之前的所有电话都做了同样的事情......我不知道为什么这不起作用。
谢谢!
编辑 1,11 月 21 日:
我认为问题在于我的 activity 扩展了 AppCompatActivity
并实现了 LifecycleRegistryOwner
。我有一个 Activity,其代码与上述代码类似,一切正常,但 Activity 正在扩展 LifecycleActivity
。当我更改此 activity、扩展 AppCompatActivity
和实施 LifecycleRegistryOwner
时,观察者的 onChange 永远不会触发 。我发现这个 bug 与我的问题有关,但我认为它只适用于 Fragments...
更新android.arch.lifecycle:extensions
至稳定版1.0.0后,该问题已解决。现在,一切正常。