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

时间:2022-08-08 23:55:31

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

首先看图:

[Android] 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() {
@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:

https://github.com/wukong1688

本博客地址: wukong1688

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

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

[Android] Android MVP 架构下 最简单的 代码实现的更多相关文章

  1. 转:Android官方MVP架构示例项目解析

    转自: http://www.infoq.com/cn/articles/android-official-mvp-architecture-sample-project-analysis 作者 吕英 ...

  2. MVP架构下解决 RxJava 自动解绑问题

    背景 MVP 模式下使用 RxJava 处理网络访问的回调,当数据返回时 Presenter 调用绑定的 View 的方法. 定义 BasePresenter 如下: public class Bas ...

  3. android开发之res下的menu &lpar;xml&plus;代码的形式&rpar;

    转载请注明出处:http://blog.csdn.net/fth826595345/article/details/9199393 先来看Menu  XML文件如何编写: <?xml versi ...

  4. Android之MVP架构

    MVP(Model View Presenter)模式是由MVC模式发展而来的,在如今的Android程序开发中显得越来越重要.本篇文章简单讨论了MVP模式的思想. 啥是MVP MVP模式的主要思想是 ...

  5. MVP架构在xamarin android中的简单使用

    好几个月没写文章了,使用xamarin android也快接近两年,还有一个月职业生涯就到两个年了,从刚出来啥也不会了,到现在回头看这个项目,真jb操蛋(真辛苦了实施的人了,无数次吐槽怎么这么丑),怪 ...

  6. android开发学习---linux下开发环境的搭建&amp&semi;&amp&semi; android基础知识介绍

    一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  7. libaio under MIPS architecture &sol;在mips架构下使用的libaio

    First, you can find libaio source in http://libaio.sourcearchive.com/ Second,download the libaio_0.3 ...

  8. Android MVP架构分析

    App架构在Android开发者中一直是讨论比较多的一个话题,目前讨论较多的有MVP.MVVM.Clean这三种.google官方对于架构的态度一直是非常开放的,让开发者自主选择组织和架构app的方式 ...

  9. Android中的MVP架构分解和实现

    1.概述 传统的Android开发架构通常是MVC模式. Model:业务逻辑和实体模型 View:相应于布局文件 Controllor:相应于Activity 单独从逻辑看起来很好,与我们做Web开 ...

随机推荐

  1. linux scp 远程复制文件

    1.从本机复制文件到远程scp 文件名 远程计算机用户名@远程计算机的ip:远程计算机存放该文件的路径2.从远程复制文件到本机:scp 远程计算机用户名@远程计算机ip:文件名 存放该文件的本机路径3 ...

  2. Pycharm中使用GitHub

    Pycharm是当前进行python开发,尤其是Django开发最好的IDE.GitHub是程序员的圣地,几乎人人都在用. 本文假设你对pycharm和github都有一定的了解,并且希望在pycha ...

  3. 关于SVN更新时文件加锁的小结

    今天使用SVN更新应用,出现了下面的问题: update D:/workspace/acode/resource/springconf -r 6622 --force    Attempted to ...

  4. yum downloadonly

         有些时候集群中的机器无法联网,通过yum进行安装,这样就需要找一个相同内核的机器将rpm下载后再到相应的机器上进行安装,以解决这一问题.      yum 有相应的工具完成这一任务.     ...

  5. 查看SQL Server 备份信息

    RESTORE HEADERONLY FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008\MSSQL\Back ...

  6. 常用sqlserver语句

    1.查看表上的索引 sp_helpIndex [表名]  --查询表上拥有的索引 2.更新其它表 update 申请信息set 研发部门='123',版本信息='321'where 单号=(selec ...

  7. Headfirst设计模式的C&plus;&plus;实现——简单工厂模式&lpar;Simple Factory&rpar;

    Pizza.h #ifndef _PIZZA_H #define _PIZZA_H #include <iostream> #include <string> class Pi ...

  8. uva 11324 The Largest Clique(图论-tarjan&comma;动态规划)

    Problem B: The Largest Clique Given a directed graph G, consider the following transformation. First ...

  9. man ssh翻译&lpar;ssh命令中文手册&rpar;

    本文为命令ssh的man文档翻译,翻译了90%的内容,剩余是一些没必要翻译的东西,请见谅. 如此文有所疑惑,希望我的另一篇文章能解惑: SSH(1)                    BSD Ge ...

  10. javascript设计模式阅读后的感悟与总结

    单例模式 用于创建唯一的一个对象. 核心在于一个判断 var index if(index){ return index; } init(); 这样只会在第一次的时候初始化创建对象,以后都不会再创建对 ...