MVVM 앱에서 작업하고 있습니다. AndroidViewModel, Activity 및 MutableLiveData를 함께 사용할 수 있었지만 왜이 특정 메서드에 문제가 있는지 알 수 없습니다.MutableLiveData를 관찰하는 동안 오류가 발생했습니다.
예를 들어, "IssuesViewModel"이라고 불리는 AndroidViewModel이 있습니다. 그것은 private MutableLiveData<Boolean> mutable;
이 두 가지 방법이 있습니다 : 내가 할 수있었습니다
//... 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
}
}
}
: 그 AppCompatActivity
을 확장하고 LifecycleRegistryOwner
구현하고, 내 "IssuesActivity"에,
// 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;
}
지금, 나는이 방법이 전에 mutableLiveData를 사용하십시오 (부울 대신 사용자 정의 객체 사용). 나는 이전의 모든 부름에 대해 똑같이했다. 나는 이것이 왜 작동하지 않는지 모른다.
감사합니다.
편집 (1)는 11 월 21 일이 :
내가 생각하는 문제는 내 활동 AppCompatActivity
를 확장하고 LifecycleRegistryOwner
을 구현한다는 것입니다. 위의 코드와 비슷한 코드를 가진 Activity가 있는데 모든 것이 작동하지만 그 Activity는 LifecycleActivity
입니다. 이 활동을 변경하면 AppCompatActivity
을 확장하고 LifecycleRegistryOwner
을 구현하면 관찰자의 onChange 은 결코을 트리거하지 않습니다. 나는이 문제가 내 문제와 관련이 bug 발견,하지만 그것은 단지 조각과 함께 작동하는 것 같아요 ...
변경시 불리지 않는 문제입니까? 또한 getMutable() 대신 void – dgngulcan
대신에 reportIssue()에서 mutable을 반환 할 수 있습니다. 어떤 이유로 든 onChanged가 호출되지 않습니다 ... 'reportIssue()'에서 mutable을 반환하려고했지만 작동하지 않았습니다. –
'reportIssue'를 호출 할 때마다'mutable'의 값은 새로운 값으로 설정되지만 액티비티 클라이언트는 이전 값을 사용할 수 있습니다 -보기 모델 내의 한 곳에서'mutable = new MutableLiveData(); '를 초기화하십시오. – pskink