使用MVP+Retrofit+rxjava让你的代码更简洁
2017-03-13 11:40
387 查看
上一篇文章[使用Retrofit和Rxjava让你的网络请求更简单](http://blog.csdn.net/yanglei0917/article/details/60964151),已经讲述了retrofit和rxjava的结合让你的网络请求变得不咋那么复杂,而且代码量清晰,高度解耦。在本篇文章中是继上一篇中的重构,因为mvp模式是当下解耦更加完全的模式,相比MVC更加简单好用
下面看看什么是mvp:
View:对应Activity,负责View的显示绘制以及用户的交互
Model:业务逻辑和实体模型
Presenter:负责完成View与Model之间的交互
下面看看我的代码结构:
其中的Model ,adapter和api中的代码没有变化还是上一篇文章的代码,这里新添加了presenter以及其实现类impl包,View包,重构了上一篇的代码 下面就是mvp实现的过程了,首先要创建一个View包,在创建一个接口类和他对应的activity同名,这里我们叫MainView,下面看看MainView的代码吧
package ledon.com.retrofitdemo.view; import java.util.List; import ledon.com.retrofitdemo.MovieBean; /** * Created by Administrator on 2017/3/13. */ public interface MainView { void onClickGetMovie(List<MovieBean.SubjectsBean>list,boolean success); }
接下来就看一看我们的presenter层的实现了,MainPersenter的接口:
package ledon.com.retrofitdemo.presenter; /** * Created by Administrator on 2017/3/13. */ public interface MainPresenter { void clickGetMovie(); }
接下来看看presenter的实现类MainPresenterImpl,这个类要实现MainPresenter接口,具体实现代码如下:
package ledon.com.retrofitdemo.presenter.impl; import android.widget.Toast; import java.util.List; import ledon.com.retrofitdemo.MainActivity; import ledon.com.retrofitdemo.MovieBean; import ledon.com.retrofitdemo.adapter.MovieAdapter; import ledon.com.retrofitdemo.api.HttpMethods; import ledon.com.retrofitdemo.presenter.MainPresenter; import ledon.com.retrofitdemo.view.MainView; import rx.Subscriber; /** * Created by Administrator on 2017/3/13. */ public class MainPresenterImpl implements MainPresenter { private MainView mainView; private Subscriber<MovieBean> subscriber; private List<MovieBean.SubjectsBean> list; public MainPresenterImpl(MainView mainView) { this.mainView = mainView; } @Override public void clickGetMovie() { getMovie(); } /** * 获取电影的列表 */ private void getMovie() { subscriber = new Subscriber<MovieBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { mainView.onClickGetMovie(null,false); } @Override public void onNext(MovieBean movieBean) { list = movieBean.getSubjects(); //把集合传到Activity 让listview显示出来 mainView.onClickGetMovie(list,true); } }; HttpMethods.getInstance().getTopMovie(subscriber, 0, 10); } }
最后我们看一下我们重构的MainActivity了,我们要在里边实现MainView这个接口,在onCreate里边 new 出来这个实体presenter = new MainPresenterImpl(this);当我们点击获取网络数据的按钮的时候,在onclick中添加presenter.clickGetMovie(); 下面我们看一下最终的实现了:
package ledon.com.retrofitdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.widget.Button; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.Toast; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import ledon.com.retrofitdemo.adapter.MovieAdapter; import ledon.com.retrofitdemo.api.HttpMethods; import ledon.com.retrofitdemo.presenter.MainPresenter; import ledon.com.retrofitdemo.presenter.impl.MainPresenterImpl; import ledon.com.retrofitdemo.view.MainView; import rx.Subscriber; public class MainActivity extends AppCompatActivity implements MainView{ @Bind(R.id.click_me_BN) Button clickMeBN; @Bind(R.id.result_TV) ListView resultTV; @Bind(R.id.activity_main) RelativeLayout activityMain; private MainPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); presenter = new MainPresenterImpl(this); } /** * 点击获取网络数据 */ @OnClick(R.id.click_me_BN) public void onClick() { presenter.clickGetMovie(); } /** * 利用mvp模式来判断是否网络请求成功 * @param list * @param success */ @Override public void onClickGetMovie(List<MovieBean.SubjectsBean> list, boolean success) { if (success){ MovieAdapter movieAdapter = new MovieAdapter(MainActivity.this, list); resultTV.setAdapter(movieAdapter); }else{ Toast.makeText(this,"请求失败",Toast.LENGTH_SHORT).show(); } } }
经过漫长的重构,我们的MVP+Retrofit+Rxjava框架实现了漫长的筹够过程,下面我们就看一看最后的效果吧
到这里我们已经成功的完成了所有的重构了,欢迎大家给出指导意见!
相关文章推荐
- 进阶之路:MVP+Retrofit+RxJava组合使用
- 使用rxjava,retrofit,okhttp实现mvp模式的数据解析
- MVP+Rxjava+Retrofit的使用
- Mvp+Retrofit2+RxJava2 项目中使用的简洁封装
- 使用MVP框架,retrofit结合Rxjava以及fresco加载图片,用recycleview实现
- 设计模式笔记之四:MVP+Retrofit+RxJava组合使用
- Rxjava+Retrofit+Mvp的使用实例(基于retrofit2.1.0)
- Mvp+Retrofit+Rxjava+RxLifecycle的封装和使用
- 如何优雅的使用Retrofit、Rxjava、Butterknife、Material开发一款MVP模式的新闻+天气预报+妹子的Android app
- Android中的RxJava,Retrofit,MVP的使用
- Material Design 风格 结合使用 Retrofit RxJava Jsoup Mvp 模式的一款资讯类 学习 app
- 进阶之路:MVP+Retrofit+RxJava组合使用
- MVP+retrofit+rxjava+Knife的简单使用
- 安卓项目快速开发框架, MVP + Retrofit + RxJava,Activity 和 Fragment 结合 MVP 模式的完整封装,大大减少代码量
- 爱吖妹纸——Retrofit + RxJava + MVP 架构 APP 体验代码家的干货集中营 Gank.io,福利多多,不容错过
- 使用RxJava+Retrofit+MVP+Glide开发一个简单的新闻客户端
- 使用MVP+Retrofit+RxJava实现的的Android Demo (上)使用Nuclues库实现MVP
- Rxjava+Retrofit+Mvp的使用实例(基于retrofit2.1.0)
- 使用MVP+Retrofit+RxJava 图片加载使用Fresco 做网络请求并展示数据
- MVP+ Retrofit+RxJava+XRecyclerView+TabLayout+Fresco结合使用