RxJava+Retrofit+OkHttp深入浅出-mvp(使用篇)
来源:互联网 发布:linux系统改编码 编辑:程序博客网 时间:2024/06/04 20:45
RxJava+Retrofit+OkHttp深入浅出-mvp(使用篇)
背景
RxJava+Retrofit+OkHttp
封装系列也基本完成了,功能无太大迭代的需要,但是最近QQ
群中有兄弟问如何结合mvp
使用这套框架,仔细考虑下确实现在结合mvp
开发项目已经是一种大趋势,不得不感叹现在技术更新的真是太快了,所以决定再一次操刀讲解下结合mvp
使用需要注意的细节。
思路
既然是结合mvp
,那就必须先了解mvp
是很方圣神了,之前也出过相关的博文,就不啰嗦了。在了解了mvp
的特效后,之前的封装大致需要做出以下修改:
剔除加载框统一处理,采用接口
view
层中手动显示调用简化
ProgressSubscriber
功能,去掉无用的content
依赖,降低耦合将网络处理加入
mvp
框架的model
层处理
思路完成了,重度使用患者估计已经完全明白了。开始我们的使用
mvp
简单使用
先简单的来一个例子,帮对mvp
不懂的同学复习下。
view
接口
定义view
层回调接口
public interface Vlistener { void onTestNext(String msg);}
presenter
接口
定义两个接口,一个用户view
层,一个用于model
,确保Model层不直接操作View层;
p
层提供给v
层的接口
/** * p层提供给v层的接口 * Created by WZG on 2016/12/26. */public interface Plistener { /** * 其他方法-演示 * @param msg */ void doTest(String msg);}
mvp
中p
层提供给m
层使用的接口
/** * mvp 中p层提供给m层使用的接口 * Created by WZG on 2016/12/26. */public interface PVlistener { /** * 测试回调 * @param msg */ void testPSuc(String msg);}
m
层提供给p
层的接口
/** * m层提供给p层的接口 * Created by WZG on 2016/12/26. */public interface Mlistener { /** * 测试接口 * @param s */ void testDo(String s);}
view
层事件调用
view
层拥有一个presenter
层的引用,触发事件后调用presenter
层接口处理。
private Plistener plistener;@OnClick(value = R.id.tv_test) void onTvTestClick(View view) { plistener.doTest("1"); }
presenter
层调用model
层接口初始数据
public class P implements Plistener,PVlistener{ private Vlistener vlistener; private Mlistener mlistener; public P(Vlistener viewListener) { this.vlistener = viewListener; mlistener =new M(this); } @Override public void doTest(String msg) { mlistener.testDo(msg); } @Override public void testPSuc(String msg) { vlistener.onTestNext(msg); }
model
层处理数据,回调给presenter
, presenter
回调给view
public class M implements Mlistener{ private PVlistener pVlistener; public M(PVlistener pVlistener) { this.pVlistener = pVlistener; } @Override public void testDo(String s) { String msg = "M" + s; pVlistener.testPSuc(msg); }}
presenter
层传递给view
@Override public void testPSuc(String msg) { vlistener.onTestNext(msg); }
通过以上的伪代码,大致了解了mvp
调用的执行过程,所以结合RxRetrofit
使用只需要各层添加对应的接口,在model
层中触发http
请求即可;
结合RxRetorift
使用
view
层添加接口
public interface Vlistener { void onTestNext(String msg); void showProg(); void dismissProg(); void onNext(String s,String m); void onError(ApiException e);}
view
回调实现
首先封装一个简单的BaseActivity
处理公用的加载框显示和隐藏处理
public class BaseActivity extends RxAppCompatActivity { // 加载框可自己定义 protected ProgressDialog pd; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(pd==null){ pd = new ProgressDialog(this); pd.setCancelable(false); } } protected void showP(){ if(pd!=null&&!pd.isShowing()){ pd.show(); } } protected void dismissP(){ if(pd!=null&&pd.isShowing()){ pd.dismiss(); } }}
view
层回调界面显示处理
public class MvpActivity extends BaseActivity implements Vlistener { @BindView(R.id.tv_test) TextView tvTest; @BindView(R.id.tv_msg) TextView tvMsg; private Plistener plistener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mvp); ButterKnife.bind(this); plistener = new P(this); } @OnClick(value = R.id.tv_test) void onTvTestClick(View view) { plistener.doTest("1"); } @OnClick(value = R.id.tv_msg) void onTvMsgClick(View view) { SubjectPostApi postEntity = new SubjectPostApi(); postEntity.setAll(true); plistener.startPost(MvpActivity.this, postEntity); } @Override public void showProg() { showP(); } @Override public void dismissProg() { dismissP(); } @Override public void onNext(String s, String m) { tvMsg.setText("返回数据:" + s); } @Override public void onError(ApiException e) { tvMsg.setText("错误信息:" + e.getMessage() + "------" + e.getCode()); } @Override public void onTestNext(String msg) { tvTest.setText("测试返回数据了:" + msg); }}
presenter
添加接口
事件触发接口
/** * p层提供给v层的接口 * Created by WZG on 2016/12/26. */public interface Plistener { /** * http请求 * @param rxAppCompatActivity * @param baseApi */ void startPost(RxAppCompatActivity rxAppCompatActivity, BaseApi baseApi); /** * 其他方法-演示 * @param msg */ void doTest(String msg);}
view
回调接口
/** * mvp 中p层提供给m层使用的接口 * Created by WZG on 2016/12/26. */public interface PVlistener { /** * 测试回调 * @param msg */ void testPSuc(String msg); /** * 成功后回调方法 * * @param resulte * @param mothead */ void onNext(String resulte, String mothead); /** * 失败 * 失败或者错误方法 * 自定义异常处理 * * @param e */ void onError(ApiException e);}
presenter
实现
当触发以后,完全交给model
层处理,当结果返回时,传递给view
即可
/** * presenter两个接口,一个请求一个回调 * 目的:确保Model层不直接操作View层 * Created by WZG on 2016/12/26. */public class P implements Plistener,PVlistener{ private Vlistener vlistener; private Mlistener mlistener; public P(Vlistener viewListener) { this.vlistener = viewListener; mlistener =new M(this); } @Override public void startPost(RxAppCompatActivity rxAppCompatActivity, BaseApi baseApi) { vlistener.showProg(); mlistener.startPost(rxAppCompatActivity,baseApi); } @Override public void doTest(String msg) { mlistener.testDo(msg); } @Override public void testPSuc(String msg) { vlistener.onTestNext(msg); } @Override public void onNext(String resulte, String mothead) { vlistener.onNext(resulte,mothead); vlistener.dismissProg(); } @Override public void onError(ApiException e) { vlistener.onError(e); vlistener.dismissProg(); }}
model
层接口
/** * m层提供给p层的接口 * Created by WZG on 2016/12/26. */public interface Mlistener { /** * 开始任务 * @param rxAppCompatActivity * @param baseApi */ void startPost(RxAppCompatActivity rxAppCompatActivity, BaseApi baseApi); /** * 测试接口 * @param s */ void testDo(String s);}
model
层实现
model
层中出了实现自定义的接口外,还需要实现Retrofit
回调接口的处理,在服务器返回数据后及时处理,回调给presenter
层的PVlistener
/** * m层数据处理 * Created by WZG on 2016/12/26. */public class M implements Mlistener, HttpOnNextListener { private PVlistener pVlistener; public M(PVlistener pVlistener) { this.pVlistener = pVlistener; } @Override public void startPost(RxAppCompatActivity rxAppCompatActivity, BaseApi baseApi) { HttpManager manager = new HttpManager(this, rxAppCompatActivity); manager.doHttpDeal(baseApi); } @Override public void testDo(String s) { String msg = "M" + s; pVlistener.testPSuc(msg); } @Override public void onNext(String resulte, String mothead) { pVlistener.onNext(resulte, mothead); } @Override public void onError(ApiException e) { pVlistener.onError(e); }}
到这里一套适用于mvp
+RxRetrofit
的框架就运用而生了,当然你可以继续添加功能,这里只是简单的给出使用的思路。
实现效果
终极封装专栏
RxJava+Retrofit+OkHttp深入浅出-终极封装专栏)
源码
传送门-下载封装源码
建议
如果你对这套封装有任何的问题和建议欢迎加入QQ群告诉我!
- RxJava+Retrofit+OkHttp深入浅出-mvp(使用篇)
- RxJava+Retrofit+OkHttp深入浅出-mvp(使用篇)
- RxJava+Retrofit+OkHttp+mvp
- mvp+rxjava+retrofit+okhttp
- MVP+Retrofit+Okhttp+RxJava
- Retrofit+Rxjava+Okhttp+MVP
- Okhttp+Retrofit+Rxjava+MVP联合使用
- Rxjava+ReTrofit+okHttp深入浅出
- Rxjava+Retrofit+okhttp+mvp实现
- 简单MVP-Retrofit-Rxjava-OKhttp
- mvp demo:mvp+rxjava+retrofit(okhttp)+greendao
- 使用rxjava,retrofit,okhttp实现mvp模式的数据解析
- MVP+Retrofit+RxJava 使用
- Android MVP架构(RxJava+SQLBrite+Retrofit+OkHttp+Glide)
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- RxJava+Retrofit+OkHttp深入浅出-终极封装三(文件上传)
- Rxjava+ReTrofit+okHttp深入浅出-终极封装三(文件上传)
- RxJava+Retrofit+OkHttp深入浅出-终极封装七(异常处理)
- 蓝桥杯BASIC_22(sine之舞)
- 数据结果和算法分析:前三章
- JVM垃圾收集算法及垃圾收集器
- eclipse常用快捷键
- (三)语音识别概述
- RxJava+Retrofit+OkHttp深入浅出-mvp(使用篇)
- 路径规划-快速搜索随机树(Rapid-exploration Random Tree)
- 26. Remove Duplicates from Sorted Array
- ImageView的属性android:scaleType
- html multi language switch
- java IO最详解
- 美团点评Android客户端融合架构演进之路
- opencv中mask图像合成扩充数据集
- 顶点插值片元