[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() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
callBack.error();
} @Override
public 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; @Override
protected 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);
} @Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_submit_req:
String url = simple_et.getText().toString();
presenter.getUrlData(url);
break;
}
} @Override
public void getMessage(String message) {
Message msg = handler.obtainMessage(, message);
handler.sendMessage(msg);
} @Override
public void error() {
Message msg = handler.obtainMessage(, "error");
handler.sendMessage(msg);
} private static class MyHandler extends Handler {
private WeakReference<SimpleMvpActivity> reference; private MyHandler(SimpleMvpActivity activity) {
reference = new WeakReference<>(activity);
} @Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
SimpleMvpActivity activity = reference.get();
switch (msg.what) {
case :
activity.simple_tv.setText(msg.obj.toString());
break;
case :
activity.simple_tv.setText(msg.obj.toString());
break;
}
}
}
}
具体代码见Github:
本博客地址: wukong1688
本文原文地址:https://www.cnblogs.com/wukong1688/p/10794023.html
转载请著名出处!谢谢~~
[Android] Android MVP 架构下 最简单的 代码实现的更多相关文章
- 转:Android官方MVP架构示例项目解析
转自: http://www.infoq.com/cn/articles/android-official-mvp-architecture-sample-project-analysis 作者 吕英 ...
- MVP架构下解决 RxJava 自动解绑问题
背景 MVP 模式下使用 RxJava 处理网络访问的回调,当数据返回时 Presenter 调用绑定的 View 的方法. 定义 BasePresenter 如下: public class Bas ...
- android开发之res下的menu (xml+代码的形式)
转载请注明出处:http://blog.csdn.net/fth826595345/article/details/9199393 先来看Menu XML文件如何编写: <?xml versi ...
- Android之MVP架构
MVP(Model View Presenter)模式是由MVC模式发展而来的,在如今的Android程序开发中显得越来越重要.本篇文章简单讨论了MVP模式的思想. 啥是MVP MVP模式的主要思想是 ...
- MVP架构在xamarin android中的简单使用
好几个月没写文章了,使用xamarin android也快接近两年,还有一个月职业生涯就到两个年了,从刚出来啥也不会了,到现在回头看这个项目,真jb操蛋(真辛苦了实施的人了,无数次吐槽怎么这么丑),怪 ...
- android开发学习---linux下开发环境的搭建&& android基础知识介绍
一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- libaio under MIPS architecture /在mips架构下使用的libaio
First, you can find libaio source in http://libaio.sourcearchive.com/ Second,download the libaio_0.3 ...
- Android MVP架构分析
App架构在Android开发者中一直是讨论比较多的一个话题,目前讨论较多的有MVP.MVVM.Clean这三种.google官方对于架构的态度一直是非常开放的,让开发者自主选择组织和架构app的方式 ...
- Android中的MVP架构分解和实现
1.概述 传统的Android开发架构通常是MVC模式. Model:业务逻辑和实体模型 View:相应于布局文件 Controllor:相应于Activity 单独从逻辑看起来很好,与我们做Web开 ...
随机推荐
- c3p0、dbcp和proxool比较
现在常用的开源数据连接池主要有c3p0.dbcp和proxool三种,其中: hibernate开发组推荐使用c3p0; spring开发组推荐使用dbcp(dbcp连接池有weblogic连接池同样 ...
- Kafka存储机制(转)
转自:https://www.cnblogs.com/jun1019/p/6256514.html Kafka存储机制 同一个topic下有多个不同的partition,每个partition为一个目 ...
- 【CodeForces - 235C】Cyclical Quest 【后缀自动机】
题意 给出一个字符串s1和q个询问,每个询问给出一个字符串s2,问这个询问的字符串的所有不同的周期串在s1中出现的次数的和. 分析 对于s1建后缀自动机.对于询问的每个字符串s2,我们按照处理循环串的 ...
- android-tip-SocketException之ETIMEDOUT
异常出现时间 如果我们有一个长连接,此时网络被关闭,或者暂时失去信号, 此时就会出现此异常. 如果出现此异常,则不得不重连.
- SpringBoot01 InteliJ IDEA安装、Maven配置、创建SpringBoot项目、yml属性配置、多环境配置、自定义properties配置
1 IntelliJ IDEA 安装 下载地址:点击前往 注意:需要下载专业版本的,注册码在网上随便搜一个就行啦 2 MAVEN工具的安装 2.1 获取安装包 下载地址:点击前往 2.2 安装过程 到 ...
- &&与||的短路运算
在谈&&和||两个运算符的短路运算之前,先看一段程序: #include <stdio.h> int main() { , para2 = , para3 = , para ...
- PHP微信授权登录信息
文件1:index.php //换成自己的接口信息 $appid = 'XXXXX'; header('location:https://open.weixin.qq.com/connect/oaut ...
- code1214 线段覆盖
贪心 把线段们按终止点b的先后排序,b小的在前面,b一样随便 然后设r为当前最大的b 每加入一条新的线段i,判断是否重合(i.a>=r) 如果重合就舍弃i,否则把i加入,ans++,更新r:r= ...
- sql insert、update、delete完以后返回主键ID
以前只用过在insert完以后利用select @@IDENTITY返回主键ID,最近在做微信公众平台,遇到一个需求是在帮绑定万微信openid后自动完成登陆,这就需要update以后返回主键ID,查 ...
- nignx ssl 配置
1. 找一个目录,例如: usr/local/nginx/ssl ,进入该目录 2. openssl genrsa -des3 -out server.key 1024 创建自身秘钥 3. op ...