Mvp+Retrofit+Rxjava+RxLifecycle的封装和使用
2017-10-20 16:30
211 查看
添加依赖
准备base类
在BaseActivity中继承RxAppCompatActivity
在BasePresenter中写拿到LifecycleProvider的方法方便后边的RetrofitService设置手动关闭订阅
使用mvp需要新建抽象类BaseView
准备接口地址类和请求参数接口类
新建接口地址类Constant
新建请求参数接口类RetrofitService
准备Retrofit工具类
新建RetrofitHelper
新建DataManager
开始使用
要使用mvp需要新建抽象类ExpressView
在MainActivity中
新建presenter类ExpressPresenter
最后
使用
2.在BasePresenter中写拿到LifecycleProvider的方法,方便后边的RetrofitService设置手动关闭订阅.
当我们在activity中初始化presenter的时候,由于activity继承的RxAppCompatActivity,只需要传this就可以把LifecycleProvider传过来了.
3.使用mvp,需要新建抽象类BaseView
2.新建请求参数接口类RetrofitService
注意:
初始化Retrofit基础配置.
可以通过getRetrofitService()方法,拿到RetrofitService对象,进而调接口.
2.新建DataManager
数据处理.
在DataManager中初始化RetrofitHelper,并通过RetrofitHelper重的getRetrofitService()方法拿到RetrofitService.
然后在DataManager中做网络请求,返回拿到的javabean,如上面代码中的getExpressInfo()方法.
ExpressView在presenter中设置,然后在activity中实现ExpressView,在回调updateView()中拿到javabean数据,然后做数据绑定等操作.
2.在MainActivity中
3.新建presenter类ExpressPresenter
注意:RxLifeCircle的手动/自动关闭代码就是在compose()中,关于RxLifeCircle请关注我写的RxLifeXCircle详解
然后在presenter中的getExpressInfo()方法中,dataManager.get DataManger的请求网络的方法.
本文的demo地址:http://download.csdn.net/download/huchengzhiqiang/10032097
准备base类
在BaseActivity中继承RxAppCompatActivity
在BasePresenter中写拿到LifecycleProvider的方法方便后边的RetrofitService设置手动关闭订阅
使用mvp需要新建抽象类BaseView
准备接口地址类和请求参数接口类
新建接口地址类Constant
新建请求参数接口类RetrofitService
准备Retrofit工具类
新建RetrofitHelper
新建DataManager
开始使用
要使用mvp需要新建抽象类ExpressView
在MainActivity中
新建presenter类ExpressPresenter
最后
添加依赖
compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0' compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' compile 'com.squareup.okhttp3:logging-interceptor:3.8.0' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0'
使用
RxLifeCycle是因为在使用Rxjava的过程中,当发布一个订阅后,页面被finsh,此时订阅的逻辑还没完成,容易引发内存泄漏的问题.
准备base类
1.在BaseActivity中继承RxAppCompatActivitypublic class BaseActivity extends RxAppCompatActivity { }
2.在BasePresenter中写拿到LifecycleProvider的方法,方便后边的RetrofitService设置手动关闭订阅.
public class BasePresenter { private LifecycleProvider<ActivityEvent> provider; public BasePresenter(LifecycleProvider<ActivityEvent> provider) { this.provider = provider; } public LifecycleProvider<ActivityEvent> getProvider() { return provider; } }
当我们在activity中初始化presenter的时候,由于activity继承的RxAppCompatActivity,只需要传this就可以把LifecycleProvider传过来了.
3.使用mvp,需要新建抽象类BaseView
public interface BaseView { /** * 显示Loading */ void showProgressDialog(); /** * 隐藏Loading */ void hideProgressDialog(); /** * 显示错误信息 * * @param msg 错误信息 */ void showError(String msg); }
准备接口地址类和请求参数接口类
1.新建接口地址类Constantpublic class Constant { /** * 服务器地址(基类地址) */ public static final String SERVER_URL = "http://www.kuaidi100.com/"; /** * 接口请求地址 */ public static class UrlOrigin { //-------------------------------------------------- //拼接的尾部地址都写下边 /** * 获取快递信息 */ public static final String get_express_info = "query"; } }
2.新建请求参数接口类RetrofitService
public interface RetrofitService { /** * 获取快递信息 * Rx方式 * @return Observable<ExpressInfo> */ @GET(Constant.UrlOrigin.get_express_info) Observable<ExpressInfo> getExpressInfoRx(@QueryMap Map<String,String> map); }
注意:
@GET(Constant.UrlOrigin.get_express_info)括号中的参数为Constant的尾部地址”query”.
准备Retrofit工具类
1.新建RetrofitHelper 初始化Retrofit基础配置.
public class RetrofitHelper { private static RetrofitHelper retrofitHelper; private RetrofitService retrofitService; public static RetrofitHelper getInstance() { return retrofitHelper == null ? retrofitHelper = new RetrofitHelper() : retrofitHelper; } private RetrofitHelper() { // 初始化Retrofit Retrof 4000 it retrofit = new Retrofit.Builder() .baseUrl(Constant.SERVER_URL) .addConverterFactory(GsonConverterFactory.create()) // json解析 .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // 支持RxJava .client(RetrofitUtils.getOkHttpClient()) //打印请求参数 .build(); retrofitService = retrofit.create(RetrofitService.class); } public RetrofitService getRetrofitService() { return retrofitService; } }
可以通过getRetrofitService()方法,拿到RetrofitService对象,进而调接口.
2.新建DataManager
数据处理.
public class DataManager { private static DataManager dataManager; private RetrofitService retrofitService; public static DataManager getInstance() { return dataManager == null ? dataManager = new DataManager() : dataManager; } /** * 初始化Retrofit,拿到RetrofitService */ private DataManager() { retrofitService = RetrofitHelper.getInstance().getRetrofitService(); } //--------------------------------------------------------- //从下边开始,就是各个接口的请求 /** * 获取快递信息 * @return Observable<ExpressInfo> */ public Observable<ExpressInfo> getExpressInfo(Map<String,String> map) { return retrofitService.getExpressInfoRx(map); } }
在DataManager中初始化RetrofitHelper,并通过RetrofitHelper重的getRetrofitService()方法拿到RetrofitService.
然后在DataManager中做网络请求,返回拿到的javabean,如上面代码中的getExpressInfo()方法.
开始使用
1.要使用mvp,需要新建抽象类ExpressViewpublic interface ExpressView extends BaseView { /** * 更新UI * * @param expressInfo 快递信息 */ void updateView(ExpressInfo expressInfo); }
ExpressView在presenter中设置,然后在activity中实现ExpressView,在回调updateView()中拿到javabean数据,然后做数据绑定等操作.
2.在MainActivity中
public class MainActivity extends BaseActivity implements ExpressView { @BindView(R.id.tv_post_info) TextView tvPostInfo; private ProgressDialog progressDialog; private ExpressPresenter expressPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); expressPresenter = new ExpressPresenter(this, this); progressDialog = new ProgressDialog(this); progressDialog.setMessage("正在获取快递信息..."); } @OnClick(R.id.btn_get_post_info) public void onViewClicked() { Map<String,String> map = new HashMap<>(); map.put("type","yuantong"); map.put("postid","11111111111"); //开始做数据请求 expressPresenter.getExpressInfo(map); } /** * 拿到数据,做数据绑定操作 * * @param expressInfo 快递信息 */ @Override public void updateView(ExpressInfo expressInfo) { tvPostInfo.setText(expressInfo.toString()); } /** * 数据请求时的 * 显示加载框 */ @Override public void showProgressDialog() { progressDialog.show(); } /** * 数据加载完成的隐藏加载框 */ @Override public void hideProgressDialog() { progressDialog.hide(); } /** * 显示错误信息 * @param msg 错误信息 */ @Override public void showError(String msg) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); } }
3.新建presenter类ExpressPresenter
public class ExpressPresenter extends BasePresenter { private ExpressView expressView; private DataManager dataManager; public ExpressPresenter(ExpressView expressView, LifecycleProvider<ActivityEvent> provider) { super(provider); this.expressView = expressView; dataManager = DataManager.getInstance(); } /** * 获取快递信息 */ public void getExpressInfo(Map<String,String> map) { expressView.showProgressDialog(); dataManager.getExpressInfo(map) .subscribeOn(Schedulers.io()) // 在子线程中进行Http访问 .observeOn(AndroidSchedulers.mainThread()) // UI线程处理返回接口 .compose(getProvider().<ExpressInfo>bindUntilEvent(ActivityEvent.DESTROY)) // onDestroy取消订阅 .subscribe(new DefaultObserver<ExpressInfo>() { // 订阅 @Override public void onNext(@NonNull ExpressInfo expressInfo) { expressView.updateView(expressInfo); } @Override public void onError(@NonNull Throwable e) { expressView.showError(e.getMessage()); expressView.hideProgressDialog(); } @Override public void onComplete() { expressView.hideProgressDialog(); } }); } }
注意:RxLifeCircle的手动/自动关闭代码就是在compose()中,关于RxLifeCircle请关注我写的RxLifeXCircle详解
最后
好了,以后只需要在Constant里新加接口地址,在RetrofitService新加请求参数,在DataManager中新建个方法,请求网络,返回Observable. 然后在presenter中的getExpressInfo()方法中,dataManager.get DataManger的请求网络的方法.
本文的demo地址:http://download.csdn.net/download/huchengzhiqiang/10032097
相关文章推荐
- Dagger+MVP+Retrofit+Rxjava+Rxlifecycle Demo
- MVP+RxJava+Retrofit使用GET解析拼参数
- MVP封装成基类结合retrofit和Rxjava
- MVP模式下使用Retrofit集合RxJava请求数据
- Rxjava 和 Retrofit 的封装使用
- MVP+Retrofit+RxJava 使用
- MVP+Retrofit+RxJava组合使用
- android的技术分解以及Retrofit源码分析以及MVP框架封装使用
- Retrofit源码分析以及MVP框架封装使用
- 单列模式,RecyclerView适配器封装,BroadcastReceiver介绍,Mvp+Retrofit+rxjava+okhttp框架的梳理总结
- Android中的RxJava,Retrofit,MVP的使用
- retrofit-rxjava封装、mvp-retrofit-rxjava demo
- Material Design 风格 结合使用 Retrofit RxJava Jsoup Mvp 模式的一款资讯类 学习 app
- MVP+Retrofit+Rxjava项目的封装
- 设计模式笔记之四:MVP+Retrofit+RxJava组合使用
- 使用Retrofit+RxJava搭建简单的MVP网络请求框架
- Android--带你一点点封装项目 MVP+BaseActivity+Retrofit+Dagger+RxJava(二)
- Android MVP+Retrofit(封装)+RxJava实例
- MVP模式使用Retrofit+RxJAVA请求数据实现购物车
- 使用MVP框架,retrofit结合Rxjava以及fresco加载图片,用recycleview实现