• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

MVVM框架+RXjava封装使用

武飞扬头像
NumOM
帮助1

   

目录

IModel的封装

BaseModel

IViewModel

 BaseViewModel

 IView

BaseActivity

BaseFragment


      总结来说rxjava中包含观察者和被观察者,这是将接口IModel一个转化实现在BaseModel中,而IVewModel是通过对生命周期的运用实现早BaseViewModel中有对内存泄露的一个操作,initModel中的做了一个反射获取数据,对其观察者的一个封装,比如说如果当你运用接口可以对你当前的数据进行一个监听如果出现问题会提出警告。

      mvvm是model,view,viewmodel,而model是负责获取数据,view负责展示,至于viewmodel是负责业务逻辑,mvvm实在mvp的基础上建立的一套解耦性更强的框架,view和viewmodel的对象持有关系的是view持有viewmodel的对象viewmodel不能持有view层的对象,因为viewmodel的生命周期要长于activity,mvvm基于databinding,livedata,lifecycle,viewmodel等框架进行搭建的,lifecycle是基于注解器以及观察者模式进行生命周期绑定的框架可以用来关联activity或者fragment声明周期方法从而达到一个自动调用生命周期方法关联的方法的效果,livedata是基于lifecycle框架实现的基于观察者的数据驱动框架,在mvvm中可以用来vm层与view层通信,databinding框架是用来实现数据ui的双向绑定

IModel的封装

  1.  
    public interface IModel {
  2.  
    RequestBody createBody(HashMap<String,Object> map);
  3.  
    Observable<BaseEntity> changeFunc(Observable< ? extends BaseEntity> observable);
  4.  
     
  5.  

BaseModel

  1.  
    public abstract class BaseModel implements IModel{
  2.  
    @Override
  3.  
    public RequestBody createBody(HashMap<String, Object> map) {
  4.  
    return RequestBody.create(MediaType.parse("application/json"),new Gson().toJson(map));
  5.  
     
  6.  
    }
  7.  
     
  8.  
    @Override
  9.  
    public Observable<BaseEntity> changeFunc(Observable<? extends BaseEntity> observable) {
  10.  
    return observable.map(new ChangeFunction<>());
  11.  
    }
  12.  
    }

IViewModel

  1.  
    public interface IViewModel extends LifecycleObserver {
  2.  
     
  3.  
    @OnLifecycleEvent(value = Lifecycle.Event.ON_CREATE)
  4.  
    void onCreate();
  5.  
    @OnLifecycleEvent(value = Lifecycle.Event.ON_DESTROY)
  6.  
    void onDestroy();
  7.  
     
  8.  
    }

 BaseViewModel

  1.  
    public abstract class BaseViewModel<M extends BaseModel> extends ViewModel implements IViewModel, Observer<BaseEntity> {
  2.  
    protected M m;
  3.  
    protected CompositeDisposable compositeDisposable;
  4.  
    private UIChange uiChange;
  5.  
     
  6.  
    @Override
  7.  
    public void onCreate() {
  8.  
    compositeDisposable = new CompositeDisposable();
  9.  
    initModel();
  10.  
    }
  11.  
     
  12.  
    @Override
  13.  
    public void onDestroy() {
  14.  
    compositeDisposable.dispose();
  15.  
    compositeDisposable.clear();
  16.  
    }
  17.  
     
  18.  
    private void initModel(){
  19.  
    ParameterizedType parameterizedType = (ParameterizedType)getClass().getGenericSuperclass();
  20.  
    Type[] types = parameterizedType.getActualTypeArguments();
  21.  
    Class clazz = (Class) types[0];
  22.  
    try {
  23.  
    m = (M) clazz.newInstance();
  24.  
    } catch (IllegalAccessException e) {
  25.  
    e.printStackTrace();
  26.  
    } catch (InstantiationException e) {
  27.  
    e.printStackTrace();
  28.  
    }
  29.  
    }
  30.  
     
  31.  
     
  32.  
    protected abstract void result(BaseEntity baseEntity);
  33.  
     
  34.  
    @Override
  35.  
    public void onSubscribe(@NotNull Disposable d) {
  36.  
    compositeDisposable.add(d);
  37.  
    showDialog();
  38.  
    }
  39.  
     
  40.  
    @Override
  41.  
    public void onNext(@NotNull BaseEntity baseEntity) {
  42.  
    result(baseEntity);
  43.  
    }
  44.  
     
  45.  
    @Override
  46.  
    public void onError(@NotNull Throwable e) {
  47.  
    showMsg("问题出错:" e.getMessage());
  48.  
    }
  49.  
     
  50.  
    @Override
  51.  
    public void onComplete() {
  52.  
    hideDialog();
  53.  
    }
  54.  
     
  55.  
    public UIChange getUiChange(){
  56.  
    if (uiChange == null){
  57.  
    uiChange = new UIChange();
  58.  
    }
  59.  
    return uiChange;
  60.  
    }
  61.  
     
  62.  
    protected void showDialog(){
  63.  
    getUiChange().setShowDialogObservable("" System.currentTimeMillis());
  64.  
     
  65.  
    }
  66.  
    protected void hideDialog(){
  67.  
    getUiChange().setHideDialogObservable("" System.currentTimeMillis());
  68.  
    }
  69.  
    protected void finishPage(){
  70.  
    getUiChange().setFinishActObServAble("" System.currentTimeMillis());
  71.  
    }
  72.  
    protected void showMsg(String msg){
  73.  
    getUiChange().setShowMsgObservable(msg);
  74.  
    }
  75.  
     
  76.  
    protected void startPage(HashMap<String,Object> map){
  77.  
    getUiChange().setStartPageObServAble(map);
  78.  
    }
  79.  
     
  80.  
    public class UIChange{
  81.  
    private MutableLiveData<String> showDialogObservable = new MutableLiveData<>();
  82.  
    private MutableLiveData<String> hideDialogObservable = new MutableLiveData<>();
  83.  
    private MutableLiveData<String> showMsgObservable = new MutableLiveData<>();
  84.  
    private MutableLiveData<String> finishActObServAble = new MutableLiveData<>();
  85.  
    private MutableLiveData<HashMap<String,Object>> startPageObServAble = new MutableLiveData<>();
  86.  
     
  87.  
    public MutableLiveData<String> getShowDialogObservable() {
  88.  
    return showDialogObservable;
  89.  
    }
  90.  
     
  91.  
    public void setShowDialogObservable(String showDialogObservable) {
  92.  
    this.showDialogObservable.setValue(showDialogObservable);
  93.  
    }
  94.  
     
  95.  
    public MutableLiveData<String> getHideDialogObservable() {
  96.  
    return hideDialogObservable;
  97.  
    }
  98.  
     
  99.  
    public void setHideDialogObservable(String hideDialogObservable) {
  100.  
    this.hideDialogObservable.setValue(hideDialogObservable);
  101.  
    }
  102.  
     
  103.  
    public MutableLiveData<String> getShowMsgObservable() {
  104.  
    return showMsgObservable;
  105.  
    }
  106.  
     
  107.  
    public void setShowMsgObservable(String showMsgObservable) {
  108.  
    this.showMsgObservable.setValue(showMsgObservable);
  109.  
    }
  110.  
     
  111.  
    public MutableLiveData<String> getFinishActObServAble() {
  112.  
    return finishActObServAble;
  113.  
    }
  114.  
     
  115.  
    public void setFinishActObServAble(String finishActObServAble) {
  116.  
    this.finishActObServAble.setValue(finishActObServAble);
  117.  
     
  118.  
     
  119.  
    }
  120.  
     
  121.  
    public MutableLiveData<HashMap<String, Object>> getStartPageObServAble() {
  122.  
    return startPageObServAble;
  123.  
    }
  124.  
     
  125.  
    public void setStartPageObServAble(HashMap<String, Object> startPageObServAble) {
  126.  
    this.startPageObServAble.setValue(startPageObServAble);
  127.  
    }
  128.  
    }
  129.  
    }
学新通

 IView

  1.  
    public interface IView {
  2.  
    void showMsg(String msg);
  3.  
    void hideDialog();
  4.  
    void showDialog();
  5.  
    void finishPage();
  6.  
    void startPage(Class clazz, Bundle bundle);
  7.  
     
  8.  
    int bindLayout();
  9.  
    void initViewModel();
  10.  
     
  11.  
    void bindDataBinding();
  12.  
    int initVerable();
  13.  
     
  14.  
     
  15.  
    }
学新通

BaseActivity

  1.  
    public abstract class BaseActivity<V extends ViewDataBinding,VM extends BaseViewModel> extends AppCompatActivity implements IView {
  2.  
     
  3.  
        protected  V v;
  4.  
        protected VM vm;
  5.  
     
  6.  
        @Override
  7.  
        protected void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
  8.  
            super.onCreate(savedInstanceState);
  9.  
            initViewModel();
  10.  
            getLifecycle().addObserver(vm);
  11.  
            vm.getUiChange().getHideDialogObservable().observe(this,hideDialogObServer);
  12.  
            vm.getUiChange().getFinishActObServAble().observe(this,finishDialogObServer);
  13.  
            vm.getUiChange().getShowDialogObservable().observe(this,showDialogObServer);
  14.  
            vm.getUiChange().getShowMsgObservable().observe(this,showMsgObServer);
  15.  
            vm.getUiChange().getStartPageObServAble().observe(this,startPageObServer);
  16.  
            bindDataBinding();
  17.  
            v.setVariable(initVerable(),vm);
  18.  
     
  19.  
        }
  20.  
     
  21.  
        @Override
  22.  
        protected void onDestroy() {
  23.  
            super.onDestroy();
  24.  
     
  25.  
            vm.getUiChange().getHideDialogObservable().removeObserver(hideDialogObServer);
  26.  
            vm.getUiChange().getFinishActObServAble().removeObserver(finishDialogObServer);
  27.  
            vm.getUiChange().getShowDialogObservable().removeObserver(showDialogObServer);
  28.  
            vm.getUiChange().getShowMsgObservable().removeObserver(showMsgObServer);
  29.  
            vm.getUiChange().getStartPageObServAble().removeObserver(startPageObServer);
  30.  
            getLifecycle().removeObserver(vm);
  31.  
            v.unbind();
  32.  
        }
  33.  
     
  34.  
        private Observer<String> showDialogObServer = new Observer<String>() {
  35.  
            @Override
  36.  
            public void onChanged(String o) {
  37.  
                showDialog();
  38.  
            }
  39.  
     
  40.  
        };
  41.  
     
  42.  
        private Observer<String> hideDialogObServer = new Observer<String>() {
  43.  
            @Override
  44.  
            public void onChanged(String o) {
  45.  
                hideDialog();
  46.  
            }
  47.  
     
  48.  
        };
  49.  
     
  50.  
        private Observer<String> finishDialogObServer = new Observer<String>() {
  51.  
            @Override
  52.  
            public void onChanged(String o) {
  53.  
                finishPage();
  54.  
            }
  55.  
     
  56.  
        };
  57.  
     
  58.  
        private Observer<String> showMsgObServer = new Observer<String>() {
  59.  
            @Override
  60.  
            public void onChanged(String o) {
  61.  
                showMsg(o);
  62.  
            }
  63.  
     
  64.  
        };
  65.  
     
  66.  
        private Observer<HashMap<String,Object>> startPageObServer = new Observer<HashMap<String,Object>>() {
  67.  
            @Override
  68.  
            public void onChanged(HashMap<String, Object> map) {
  69.  
                Class clazz = (Class) map.get(UIFiled.PAGECLAZZ);
  70.  
                Object o = map.get(UIFiled.PAGEBUNDLE);
  71.  
                Bundle bundle = null;
  72.  
                if (o != null)
  73.  
                    bundle = (Bundle) o;
  74.  
                    startPage(clazz,bundle);
  75.  
            }
  76.  
        };
  77.  
     
  78.  
        @Override
  79.  
        public void showMsg(String msg) {
  80.  
            ToastUtils.showShort(msg);
  81.  
        }
  82.  
     
  83.  
        @Override
  84.  
        public void hideDialog() {
  85.  
     
  86.  
        }
  87.  
     
  88.  
        @Override
  89.  
        public void showDialog() {
  90.  
     
  91.  
        }
  92.  
     
  93.  
        @Override
  94.  
        public void finishPage() {
  95.  
            finish();
  96.  
        }
  97.  
     
  98.  
        @Override
  99.  
        public void startPage(Class clazz, Bundle bundle) {
  100.  
            Intent intent = new Intent(this,clazz);
  101.  
            if (bundle != null){
  102.  
                intent.putExtras(bundle);
  103.  
            }
  104.  
            startActivity(intent);
  105.  
        }
  106.  
     
  107.  
        @Override
  108.  
        public void initViewModel() {
  109.  
            ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass();
  110.  
            Type[] types = parameterizedType.getActualTypeArguments();
  111.  
            Class clazz = (Class) types[1];
  112.  
            vm = (VM) new ViewModelProvider(this,
  113.  
                    new ViewModelProvider.NewInstanceFactory()).get(clazz);
  114.  
        }
  115.  
     
  116.  
        @Override
  117.  
        public void bindDataBinding() {
  118.  
            v = DataBindingUtil.setContentView(this,bindLayout());
  119.  
        }
  120.  
     
  121.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfjjggb
系列文章
更多 icon
同类精品
更多 icon
继续加载