Android  MVP 架构下  最简单的 代码实现

首先看图:

上图是MVP,下图是MVC

MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互。而在mvp中,view层只和presenter层交互,而model层也和presenter交互,presenter构成了view层和model层的桥梁,也解耦了view层和model层。这一点很关键。我认为,这也是mvp的本质:

解耦view层和model层,让view层和model层通过presenter层进行通信。换个说法就是让诸如网络请求,数据库读写的逻辑,从activity中剥离出来。activit只负责页面的展示,不关心model层的逻辑。

简单的MVP模式,3个class 和 1个interface 就可以实现

各文件主要功能如下:

1个interface:定义activity 要实现的回调方法

3个class:1个Model层定义文件 +  1个业务逻辑 Presenter文件  + 1个Activity文件

列举实现代码

1)interface定义文件

MainCallBack.java

package com.jack.basemvp.basemvp;/*** 定义要实现的回调方法*/
public interface MainCallBack {void getMessage(String message);void error();
}

2)Model层文件

MainModel.java

package com.jack.basemvp.basemvp;import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;/*** 定Model*/
public class MainModel {public Call getData(String url) {OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(url).build();return client.newCall(request);}
}

3)Presenter层文件

MainPresenter.java

package com.jack.basemvp.basemvp;import android.support.annotation.NonNull;import java.io.IOException;import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;/*** 定义业务逻辑 Presenter*/
public class MainPresenter {private MainCallBack callBack;private MainModel model;public MainPresenter(MainCallBack callBack) {this.callBack = callBack;model=new MainModel();}public void getUrlData(String url){model.getData(url).enqueue(new Callback() {@Overridepublic void onFailure(@NonNull Call call, @NonNull IOException e) {callBack.error();}@Overridepublic void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {callBack.getMessage(response.body().string());}});}}

4)activity调用

SimpleMvpActivity.java

package com.jack.basemvp.activity;import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;import com.jack.basemvp.R;
import com.jack.basemvp.basemvp.MainCallBack;
import com.jack.basemvp.basemvp.MainPresenter;import java.lang.ref.WeakReference;public class SimpleMvpActivity extends AppCompatActivity implements View.OnClickListener,MainCallBack{public EditText simple_et;Button btn_submit_req;TextView simple_tv;private MainPresenter presenter;private MyHandler handler;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_simple_mvp);simple_et = (EditText) findViewById(R.id.simple_et);btn_submit_req = (Button) findViewById(R.id.btn_submit_req);simple_tv = (TextView) findViewById(R.id.simple_tv);handler = new MyHandler(this);presenter = new MainPresenter(this);btn_submit_req.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.btn_submit_req:String url = simple_et.getText().toString();presenter.getUrlData(url);break;}}@Overridepublic void getMessage(String message) {Message msg = handler.obtainMessage(0, message);handler.sendMessage(msg);}@Overridepublic void error() {Message msg = handler.obtainMessage(1, "error");handler.sendMessage(msg);}private static class MyHandler extends Handler {private WeakReference<SimpleMvpActivity> reference;private MyHandler(SimpleMvpActivity activity) {reference = new WeakReference<>(activity);}@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);SimpleMvpActivity activity = reference.get();switch (msg.what) {case 0:activity.simple_tv.setText(msg.obj.toString());break;case 1:activity.simple_tv.setText(msg.obj.toString());break;}}}
}

具体代码见Github:

https://github.com/wukong1688

本博客地址: wukong1688

本文原文地址:https://www.cnblogs.com/wukong1688/p/10794023.html

转载请著名出处!谢谢~~

转载于:https://www.cnblogs.com/wukong1688/p/10794023.html

[Android] Android MVP 架构下 最简单的 代码实现相关推荐

  1. Android官方MVP架构详解

    综述 对于MVP (Model View Presenter)架构是从著名的MVC(Model View Controller)架构演变而来的.而对于Android应用的开发中本身可视为一种MVC架构 ...

  2. android 美团下拉菜单,Android仿美团分类下拉菜单实例代码

    本文实例为大家分享了Android仿美团下拉菜单的实现代码,分类进行选择,供大家参考,具体内容如下 效果图 操作平台 AS2.0 第三方框架:butterknife build.gradle depe ...

  3. Android不同CPU架构下so文件兼容问题总结

    一.Android 设备的CPU类型通常分以下几种 armeabiv-v7a: 第7代及以上的 ARM 处理器,目前主流版本,大部分Android设备都使用它. arm64-v8a: 第8代.64位A ...

  4. 适用于小型项目的 Android MVP 架构

    MVP 架构介绍 其实没什么好介绍的了,网上有很多相关的文章,我就不去 copy 了,反正就是 Google 公司推出的一个适合中大型 Android 项目开发的架构. 之前做了一个项目使用的就是 M ...

  5. android 服务架构,Android MVP架构搭建

    目录 引言 为什么用MVP架构 MVP理论知识 乞丐版MVP架构模式的代码实现 MVP中的代码复用场景 平民版MVP架构 - base层顶级父类 Fragment怎么办 时尚版MVP架构 - Mode ...

  6. android MVP——mvp架构的应用和优化

    MVP架构在android还是很好用的.我也在试着将mvp用在项目中. 下面我就来说说mvp模式的应用和优化. mvp模式的概念 MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Co ...

  7. 解读Android官方MVP项目单元测试

    Google在3月份推出了一个项目,用来介绍Android MVP架构的各种组合,可以认为是官方在这方面的最佳实践.令人称道的是除了MVP本身之外,这些工程配备了极其完善的单元测试用例,学习价值极高. ...

  8. MVP架构设计 初探

    1.什么是MVP? 简单理解:就是通过Presenter将View和Model解耦 M ->Model 包括:与数据相关都属于M层(例如:数据库.文件.网络.数据解析.数据保存......) V ...

  9. 谈谈 Android MVP 架构 | 掘金技术征文

    前言:本文所写的是博主的个人见解,如有错误或者不恰当之处,欢迎私信博主,加以改正!原文链接,demo链接 MVP 架构简介 说起 MVP 架构,相信很多朋友都看过,网上也有很多这方面的资料.博主使用 ...

最新文章

  1. 【MATLAB】数据分析之多项式及其函数
  2. AI到底如何改变教育?好未来重金押注AI的背后逻辑
  3. mui 打开openWindow新页面不读取缓存的设置/mui中h5清除缓存页面的办法
  4. .NET Framework开源详细配置
  5. hdu 1429 胜利大逃亡(续) bfs+状态压缩
  6. mysql数据导入导出方法总结
  7. uni-app实现微信小程序本地图片转为base64
  8. 带你手写基于 Spring 的可插拔式 RPC 框架(四)代理类的注入与服务启动
  9. Unity的camera组件
  10. oracle经典面试题以及解答
  11. cs客户端 实时权限_【CS学习笔记】7、SMBbean的作用
  12. 关于proc的介绍,比较详细
  13. Delphi / Pascal 语法知识干货
  14. VS2015导出带文件的项目模板
  15. android ui 开发界面量具 尺子,android尺子的自定义view——RulerView详解
  16. 【概率论与数理统计】猴博士 笔记 p24-25 条件概率密度函数、求两个随机变量形成的函数的分布
  17. Win10系统默认播放器一直被修改怎么解决
  18. Mac系统接移动硬盘进行读写软件Mounty
  19. HashMap为什么要使用红黑树
  20. 遗传算法简单求函数最值实例

热门文章

  1. BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )
  2. Linked List Cycle II
  3. 转载自——Json.net动态序列化以及对时间格式的处理
  4. ICE BOX 配置,使用----第一篇
  5. 命令行编译运行CSharp文件
  6. kmp求前缀和后缀的最大重复部分
  7. ccf 高速公路(顺便当tarjan模板)
  8. 用vs2017编写html,vs2017可以编写java
  9. python 面板数据分析_科学网—Python中的结构化数据分析利器-Pandas简介 - 郑俊娟的博文...
  10. html5 本地批量存储,HTML5本地存储