Android开发AndroidAndroid知识

RxJava+Retrofit+MVP开发介绍

2017-03-18  本文已影响0人  乐小文

RxJava简介

给Android开发者RxJava详解
这算是介绍RxJava比较详细的文章了,阅读此文我相信你会有很大的收获的。
RxJava探索
这个专栏中介绍了RxJava中的几个主要类,值得一看,相信会帮助你对RxJava有更深的理解。

其实RxJava对于Android开发火了很久了,自从笔者使用后,发现RxJava火起来并不无道理,给笔者的第一印象就是方便!方便!方便!,重要的事情说三遍。
接下来我们就一起来结合代码看看RxJava给我们开发带来了哪些方便。

 App
                .initCookList(page, rows)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .map(new Func1<CookListBean, List<CookListBean.TngouBean>>() {
                    @Override
                    public List<CookListBean.TngouBean> call(CookListBean cookListBean) {
                        return cookListBean.getTngou();
                    }
                }).subscribe(new Action1<List<CookListBean.TngouBean>>() {
            @Override
            public void call(final List<CookListBean.TngouBean> list) {
                initListener(list);
            }
        });

这样的链式操作逻辑是不是很清楚?不需要我们去做一些线程的操作,RxJava中已经为我们做好了这一切。
以前我们后台请求数据,前台更新ui就会有很多问题。先需要在子线程中做一些IO操作,后在主线程中去更新ui。看似还比较简单,但如果我们需要在请求回来的数据中做一些判定及操作时,那么,代码就谜之缩进了。。。。

Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("hello");
                subscriber.onNext("Leo");
                subscriber.onCompleted();
            }
        }).subscribe(new Action1<String>() {
           @Override
           public void call(String s) {
               Toast.makeText(RxJavaActivity.this, s, Toast.LENGTH_SHORT).show();
               Log.d(TAG, "call: "+s);
           }
       });      

RxJava的东西其实很多,这里只是简单的介绍了如何使用和一些基本概念,其实还有操作符,调度器等等,有兴趣了解的小盆友去看看文章开头所推荐的两篇文章。

Retrofit简介

Retrofit简介
Retrofit在上篇文章中已经简单的介绍了,后面会结合代码来具体的使用Retrofit。

MVP模式简介

MVC MVP

public class MainActivity extends MvpActivity<CookListPresenter> implements CookListView {

    @BindView(R.id.btn)
    Button mBtn;
    @BindView(R.id.recycler)
    RecyclerView mRecycler;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        initToolBarAsHome("MVP+Retrofit+RxJava");
    }

    @Override
    protected CookListPresenter createPresenter() {
        return new CookListPresenter(this);
    }

    @Override
    public void getDataSuccess(CookListModel model) {
        dataSuccess(model);
    }

    @Override
    public void getDataFail(String msg) {
        toastShow("网络不给力!");
    }

    @OnClick(R.id.btn)
    public void onClick() {
        showProgressDialog();
        mvpPresenter.loadDataByRetrofitRxjava(1,20);
    }

    //处理数据    
    private void dataSuccess(CookListModel model) {
        MyAdapter adapter = new MyAdapter(model.getTngou());
        mRecycler.setLayoutManager(new LinearLayoutManager(this));
        mRecycler.setAdapter(adapter);
    }
}

CookListPresenter

public class CookListPresenter extends BasePresenter<CookListView> {
    public CookListPresenter(CookListView view) {
        attachView(view);
    }
    public void loadDataByRetrofitRxjava(int page,int rows) {
        mvpView.showLoading();
        addSubscription(apiStores.getCookList(page,rows), new ApiCallback<CookListModel>(){

            @Override
            public void onSuccess(CookListModel model) {
                mvpView.getDataSuccess(model);
            }

            @Override
            public void onFailure(String msg) {
            mvpView.getDataFail(msg);
            }

            @Override
            public void onFinish() {
                mvpView.hideLoading();
            }
        } );
    }
}

不难看出,IO操作放在了Presenter里面,取回数据成功后,回调给View,然后更新UI。这样的模式是不是很清晰,view和presenter各司其职,大大降低了耦合。

好了,RxJava+Retrofit+MVP一些基本的东西就介绍完了,随后还是会上传一份demo到github上。
很难得周末一个人静下心写写文章,其实写完感觉还是蛮爽的。

demo已上传到github
RxJava_Retrofit_MVP_Demo

上一篇 下一篇

猜你喜欢

热点阅读