Android网络开发框架Retrofit(五:实战篇,实现MVP模式进行开发)

Android网络开发框架Retrofit(五:实战篇,实现MVP模式进行开发)


从前面几节的代码看来,似乎很不优雅,特别是 四:扩展篇,Retrofit+RxJava,加上RxJava后,代码看起来相当的难看,所以今天就说下如果使用MVP开发模式,将业务逻辑和界面分离,使我们的代码变得优雅好看起来

mvp,即是(model-处理业务逻辑(主要是数据读写,或者与后台通信(其实也是读写数据)),view-处理ui控件,presenter-主导器,操作model和view)
是从mvc模式演变过来的,在Android开发中,使用mvc模式,Activity变得不伦不类,不知道应该是v还是c了,为了解决这个问题,mvp出来了,将Activity划分成了view,在Activity中,我们只做更新界面的操作,其他的业务逻辑再也不放在Activity中了,这样可以更方便的管理我们的代码,利用这种开发模式还有一个很大的好处,就是团队开发项目起来快捷了很多,项目构建师将mvp中的p写好,将m和v分给团队成员,因为都是一个个接口,只要团队成员实现这些接口,这个项目就可以很快完成了,这样项目进度会大大的提高了很多,那么接下来,我们将mvp这种模式的实现展示一下

先建立好相对应的包名
比如我项目的包名是com.ysbing.retrofitdemo,在mvp中的目录下面会这样建立

注意我红框标注的地方,model和model下面的impl,presenter和presenter下面的impl,ui里面的activity,还有view
从目录结构可以看得出mvp的分工了,这样,分成几个模块后,写起来一开始会费点功夫,但这个模式搭建出来后,再去实现它,就会快很多了

1、Teach4Activity将presenter创建对象到Teach4Activity中,然后实现ITeach4View里面的接口方法
public class Teach4Activity extends Activity implements ITeach4View {

    private Teach4Presenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_teach4);
        presenter = new Teach4PresenterImpl(this);
    }
}

2、写Teach4PresenterImpl里的方法,将Activity里传过来的ITeach4View进行操作,并初始化Teach4Model
public class Teach4PresenterImpl implements Teach4Presenter {
    private ITeach4View teach4View;
    private Teach4Model teach4Model;

    public Teach4PresenterImpl(ITeach4View teach4View) {
        this.teach4View = teach4View;
        teach4Model = new Teach4ModelImpl();
    }
}
3、实现Teach4ModelImpl里的业务逻辑
public class Teach4ModelImpl implements Teach4Model {
    @Override
    public void queryIpInfo(final String ip, Subscriber<ApiBean<IpBean>> subscriber) {
    }
}
4、将数据返回给Teach4PresenterImpl,然后更新ui
 @Override
    public void queryIpInfo(String ip) {
        Subscriber<ApiBean<IpBean>> mySubscriber = new Subscriber<ApiBean<IpBean>>() {
            @Override
            public void onCompleted() {
            }

            @Override
            public void onError(Throwable e) {
                teach4View.showError(e);
            }

            @Override
            public void onNext(ApiBean<IpBean> apiBean) {
                teach4View.showIpInfo(apiBean.data);
            }
        };
        teach4Model.queryIpInfo(ip, mySubscriber);
    }
5、实现Activity中所有的接口方法,完成mvp模式的开发
@Override
    public void showIpInfo(IpBean ipBean) {
        String ipInfo = String.format("这里是用MVP模式结合RxJava获取的数据,IP是:%s,我在%s%s%s", ipBean.ip, ipBean.country, ipBean.region, ipBean.city);
        mIpInfoText.setText(ipInfo);
    }

    @Override
    public void showError(Throwable e) {
        String err = "很遗憾失败了,错误是:" + e.toString();
        mIpInfoText.setText(err);
    }


本轮教程到此结束,Retrofit是个很优秀的网络框架,希望会越来越多人喜欢上并用它,接下来有时间我会对Retrofit的源码进行讲解,谢谢大家





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值