[Android] Android MVP 架构下 最简单的 代码实现
Android MVP 架构下 最简单的 代码实现
首先看图:
上图是MVP,下图是MVC
解耦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 架构下 最简单的 代码实现相关推荐
- Android官方MVP架构详解
综述 对于MVP (Model View Presenter)架构是从著名的MVC(Model View Controller)架构演变而来的.而对于Android应用的开发中本身可视为一种MVC架构 ...
- android 美团下拉菜单,Android仿美团分类下拉菜单实例代码
本文实例为大家分享了Android仿美团下拉菜单的实现代码,分类进行选择,供大家参考,具体内容如下 效果图 操作平台 AS2.0 第三方框架:butterknife build.gradle depe ...
- Android不同CPU架构下so文件兼容问题总结
一.Android 设备的CPU类型通常分以下几种 armeabiv-v7a: 第7代及以上的 ARM 处理器,目前主流版本,大部分Android设备都使用它. arm64-v8a: 第8代.64位A ...
- 适用于小型项目的 Android MVP 架构
MVP 架构介绍 其实没什么好介绍的了,网上有很多相关的文章,我就不去 copy 了,反正就是 Google 公司推出的一个适合中大型 Android 项目开发的架构. 之前做了一个项目使用的就是 M ...
- android 服务架构,Android MVP架构搭建
目录 引言 为什么用MVP架构 MVP理论知识 乞丐版MVP架构模式的代码实现 MVP中的代码复用场景 平民版MVP架构 - base层顶级父类 Fragment怎么办 时尚版MVP架构 - Mode ...
- android MVP——mvp架构的应用和优化
MVP架构在android还是很好用的.我也在试着将mvp用在项目中. 下面我就来说说mvp模式的应用和优化. mvp模式的概念 MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Co ...
- 解读Android官方MVP项目单元测试
Google在3月份推出了一个项目,用来介绍Android MVP架构的各种组合,可以认为是官方在这方面的最佳实践.令人称道的是除了MVP本身之外,这些工程配备了极其完善的单元测试用例,学习价值极高. ...
- MVP架构设计 初探
1.什么是MVP? 简单理解:就是通过Presenter将View和Model解耦 M ->Model 包括:与数据相关都属于M层(例如:数据库.文件.网络.数据解析.数据保存......) V ...
- 谈谈 Android MVP 架构 | 掘金技术征文
前言:本文所写的是博主的个人见解,如有错误或者不恰当之处,欢迎私信博主,加以改正!原文链接,demo链接 MVP 架构简介 说起 MVP 架构,相信很多朋友都看过,网上也有很多这方面的资料.博主使用 ...
最新文章
- 【MATLAB】数据分析之多项式及其函数
- AI到底如何改变教育?好未来重金押注AI的背后逻辑
- mui 打开openWindow新页面不读取缓存的设置/mui中h5清除缓存页面的办法
- .NET Framework开源详细配置
- hdu 1429 胜利大逃亡(续) bfs+状态压缩
- mysql数据导入导出方法总结
- uni-app实现微信小程序本地图片转为base64
- 带你手写基于 Spring 的可插拔式 RPC 框架(四)代理类的注入与服务启动
- Unity的camera组件
- oracle经典面试题以及解答
- cs客户端 实时权限_【CS学习笔记】7、SMBbean的作用
- 关于proc的介绍,比较详细
- Delphi / Pascal 语法知识干货
- VS2015导出带文件的项目模板
- android ui 开发界面量具 尺子,android尺子的自定义view——RulerView详解
- 【概率论与数理统计】猴博士 笔记 p24-25 条件概率密度函数、求两个随机变量形成的函数的分布
- Win10系统默认播放器一直被修改怎么解决
- Mac系统接移动硬盘进行读写软件Mounty
- HashMap为什么要使用红黑树
- 遗传算法简单求函数最值实例
热门文章
- BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )
- Linked List Cycle II
- 转载自——Json.net动态序列化以及对时间格式的处理
- ICE BOX 配置,使用----第一篇
- 命令行编译运行CSharp文件
- kmp求前缀和后缀的最大重复部分
- ccf 高速公路(顺便当tarjan模板)
- 用vs2017编写html,vs2017可以编写java
- python 面板数据分析_科学网—Python中的结构化数据分析利器-Pandas简介 - 郑俊娟的博文...
- html5 本地批量存储,HTML5本地存储