2017-10-03 2 views
0

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 발견,하지만 그것은 단지 조각과 함께 작동하는 것 같아요 ...

+0

변경시 불리지 않는 문제입니까? 또한 getMutable() 대신 void – dgngulcan

+0

대신에 reportIssue()에서 mutable을 반환 할 수 있습니다. 어떤 이유로 든 onChanged가 호출되지 않습니다 ... 'reportIssue()'에서 mutable을 반환하려고했지만 작동하지 않았습니다. –

+0

'reportIssue'를 호출 할 때마다'mutable'의 값은 새로운 값으로 설정되지만 액티비티 클라이언트는 이전 값을 사용할 수 있습니다 -보기 모델 내의 한 곳에서'mutable = new MutableLiveData(); '를 초기화하십시오. – pskink

답변

0

이 문제는 android.arch.lifecycle:extensions을 안정 버전 1.0.0으로 업데이트 한 후 해결되었습니다. 이제 모든 것이 예상대로 작동합니다.