超简的MVP + RxJava + Retrofit

G站项目链接

超简的MVP + RxJava + Retrofit

  • ExampleActivity Activity
  • ExampleApi 接口类
  • ExampleBaseData 基础数据(就写了一个BASE_URL)
  • ExampleController 控制器 定义Presenter以及View会调用的方法
  • ExampleEntity 网络请求返回实体类
  • ExamplePresenter 操控者(数据请求实现)
使用

Presenter 业务实现

其中list()ExampleApi.class中定义的请求方法(@GET("weather_mini?city=北京") Observable<ExampleEntity> list();),请求参数为空,返回值为ExampleEntity

        view.showProgress("加载中");
        RetrofitApiFactory.createApi(ExampleApi.class,context)
                .list()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new ReSubscriber<ExampleEntity>() {
                    @Override
                    protected void onError(ApiException ex) {
                        view.hideProgress();
                        view.showError(ex.getMessage());
                    }
                    @Override
                    public void onCompleted() {
                    }

                    @Override
                    public void onNext(ExampleEntity entity) {
                        view.hideProgress();
                       // todo something
                        if(entity!=null){
                            view.success(entity);
                        }else {
                            view.fail("异常");
                        }
                    }
                });

Activity 调用

	ExamplePresenter presenter = new ExamplePresenter(this,this);
	presenter.list();

Activity 请求结果处理

	@Override
    public void success(ExampleEntity data) {
        times ++ ;
        tvShow.setText("地区:" + data.getData().getCity() + "\n" +
                "概述:"+ data.getData().getGanmao() + "\n" +
                "温度:"+ data.getData().getWendu() + "\n" +
                "昨天:"+ data.getData().getYesterday().getType() + "\n" +
                "请求第" + times + "次");
    }

    @Override
    public void fail(String msg) {
        Toast.makeText(this, "失败:" + msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void showProgress(String message) {
        //实现loading
    }

    @Override
    public void hideProgress() {
        //取消loading
    }

    @Override
    public void showError(String message) {
        Toast.makeText(this, "异常:" + message, Toast.LENGTH_SHORT).show();
    }

G站项目链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVP(Model View Presenter)其实就是一种项目的整体框架,能让你的代码变得更加简洁,说起框架大家可能还会想到MVC、MVVM。由于篇幅原因,这里我们先不讲MVVM,先来看一下MVC。其实Android本身就采用的是MVC(Model View Controllor)模式、其中Model指的是数据逻辑和实体模型;View指的是布局文件、Controllor指的是Activity。对于很多Android初学者可能会有这样的经历,写代码的时候,不管三七二十一都往Activity中写,当然我当初也是这么干的,根本就没有什么框架的概念,只要能实现某一个功能就很开心了,没有管这么多。当然项目比较小还好,一旦项目比较大,你会发现,Activity所承担的任务其实是很重的,它既要负责页面的展示和交互,还得负责数据的请求和业务逻辑之类的工作,相当于既要打理家庭,又要教育自己调皮的孩子,真是又当爹又当妈。。。那该怎么办呢?这时候Presenter这个继父来到了这个家庭。Presenter对Activity说,我来了,以后你就别这么辛苦了,你就好好打理好View这个家,我专门来负责教育Model这孩子,有什么情况我会向你反映的。这时Activity流下了幸福的眼泪,从此,Model、View(Activity)、Presenter一家三口过上了幸福的生活。。。好了磕个药继续,由于Presenter(我们自己建的类)的出现,可以使View(Activity)不用直接和Model打交道,View(Activity)只用负责页面的显示和交互,剩下的和Model交互的事情都交给Presenter做,比如一些网络请求、数据的获取等,当Presenter获取到数据后再交给View(Activity)进行展示,这样,Activity的任务就大大减小了。这便是MVP(Model 还是指的数据逻辑和实体模型,View指的是Activity,P就是Presenter)框架的工作方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值