StateLiveData.java 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package com.dayayuemeng.classroom.api;
  2. import androidx.annotation.NonNull;
  3. import androidx.lifecycle.LifecycleOwner;
  4. import androidx.lifecycle.MutableLiveData;
  5. import androidx.lifecycle.Observer;
  6. /**
  7. * 记录请求状态用的 LiveData
  8. * 内部实现了当请求成功或失败时取消掉监听的功能
  9. */
  10. public class StateLiveData extends MutableLiveData<RequestState> {
  11. private LifecycleOwner observerOwner;
  12. @Override
  13. public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super RequestState> observer) {
  14. observerOwner = owner;
  15. ObserverWrapper observerWrapper = new ObserverWrapper(observer);
  16. super.observe(owner, observerWrapper);
  17. }
  18. public void loading() {
  19. postValue(RequestState.loading());
  20. }
  21. public void success() {
  22. postValue(RequestState.success());
  23. }
  24. public void failed(int errorCode) {
  25. postValue(RequestState.failed(errorCode));
  26. }
  27. private class ObserverWrapper implements Observer<RequestState> {
  28. Observer<? super RequestState> origin;
  29. ObserverWrapper(Observer<? super RequestState> origin) {
  30. this.origin = origin;
  31. }
  32. @Override
  33. public void onChanged(RequestState o) {
  34. origin.onChanged(o);
  35. if (o.getState() != RequestState.State.LOADING) {
  36. removeObservers(observerOwner);
  37. }
  38. }
  39. }
  40. }