2017-10-03 21 views
0

MVVMアプリケーションで作業しています。私はAndroidViewModel、Activity、およびMutableLiveDataを一緒に使用することができましたが、なぜこの特定のメソッドに問題があるのか​​わかりません。MutableLiveDataを見ている間にエラーが発生しました

たとえば、AndroidViewModelが「IssuesViewModel」と呼ばれています。それは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を使用してください(Booleanの代わりにカスタムObjectを使用)。以前のすべての電話で同じことをしました...なぜこれが機能していないのか分かりません。

ありがとうございます!

編集1、11月21日:

私はこの問題は、私の活動がAppCompatActivityを拡張し、LifecycleRegistryOwnerを実装していることだと思います。私は上のものと同様のコードを持つアクティビティを持っていますが、すべてが動作しますが、そのアクティビティはLifecycleActivityに拡張されています。このアクティビティを変更すると、AppCompatActivityを拡張してLifecycleRegistryOwnerを実装すると、オブザーバのonChange は決してをトリガしません。私はこれが私の問題に関連しているbugを見つけましたが、私はそれがちょうどフラグメントで動作すると思っています...

+0

変更時に呼び出されないという問題はありますか?また、getMutable()の代わりに、voidの代わりにreportIssue()の代わりにmutableを返すことができます – dgngulcan

+0

何らかの理由で、onChangedは呼び出されませんでした... 'reportIssue()'でmutableを返そうとしましたが、動作しませんでした。 –

+0

'reportIssue'を呼び出すたびに' mutable'の値は新しい値に設定されますが、あなたのアクティビティクライアントは古い値を使用することがあります - ビューモデル内のある場所で 'mutable = new MutableLiveData();'を単に初期化します。 – pskink

答えて

0

android.arch.lifecycle:extensionsを安定版1.0.0にアップデートした後でこの問題は解決しました。今、すべてが期待通りに機能します。

関連する問題