View 对应于Activity,负责View的绘制以及与用户交互
Model 依然是业务逻辑和实体模型
Presenter 负责完成View于Model间的交互

模拟客户端的登录操作,并实现登录成功与登录失败的回调。

1.bean文件

 1 package com.mvp.bean;
 2
 3 public class UserBean {
 4     private String username;
 5     private String pwd;
 6
 7     public UserBean() {
 8         super();
 9     }
10
11     public UserBean(String username, String pwd) {
12         super();
13         this.username = username;
14         this.pwd = pwd;
15     }
16
17     public String getUsername() {
18         return username;
19     }
20
21     public void setUsername(String username) {
22         this.username = username;
23     }
24
25     public String getPwd() {
26         return pwd;
27     }
28
29     public void setPwd(String pwd) {
30         this.pwd = pwd;
31     }
32
33 }

2.Model

1 package com.mvp.model;
2
3 import com.mvp.listener.OnLoginListener;
4
5 public interface UserModel {
6     // 登录
7     void Login(String username, String pwd,OnLoginListener listener);
8 }

3.Model的实现,OnLoginListener是成功、失败的回调

 1 package com.mvp.model;
 2
 3 import android.annotation.SuppressLint;
 4
 5 import com.mvp.listener.OnLoginListener;
 6
 7 @SuppressLint("HandlerLeak")
 8 public class UserModelImpl implements UserModel {
 9     /**
10      * 实现业务操作
11      */
12     @Override
13     public void Login(final String username, String pwd,
14             final OnLoginListener listener) {
15         new Thread() {
16
17             @Override
18             public void run() {
19                 if (username.equals("1")) {
20                     listener.onSuccess();
21                 } else if (username.equals("2")) {
22                     listener.onError();
23                 }
24             }
25         }.start();
26     }
27 }

4.UserView

 1 package com.mvp.view;
 2
 3 public interface UserView {
 4
 5     String getUserName();
 6
 7     String getPwd();
 8
 9     void showDialog(String title);
10 }

5.Presenter

 1 package com.mvp.presenter;
 2
 3 import android.os.Handler;
 4
 5 import com.mvp.listener.OnLoginListener;
 6 import com.mvp.model.UserModel;
 7 import com.mvp.model.UserModelImpl;
 8 import com.mvp.view.UserView;
 9
10 public class UserPresenter {
11     private UserModel userModel;
12     private UserView userView;
13     private Handler mHandler = new Handler();
14
15     public UserPresenter(UserView userView) {
16         this.userView = userView;
17         userModel = new UserModelImpl();
18     }
19
20     public void login(String username, String pwd) {
21         userModel.Login(username, pwd, new OnLoginListener() {
22
23             @Override
24             public void onSuccess() {
25                 mHandler.post(new Runnable() {
26
27                     @Override
28                     public void run() {
29                         userView.showDialog("success");
30                     }
31                 });
32             }
33
34             @Override
35             public void onError() {
36                 mHandler.post(new Runnable() {
37
38                     @Override
39                     public void run() {
40                         userView.showDialog("error");
41                     }
42                 });
43             }
44         });
45     }
46 }

6.Activity文件

 1 package com.mvp.view;
 2
 3 import android.app.Activity;
 4 import android.app.AlertDialog;
 5 import android.content.Context;
 6 import android.os.Bundle;
 7 import android.view.View;
 8 import android.view.View.OnClickListener;
 9 import android.widget.Button;
10 import android.widget.EditText;
11 import android.widget.TextView;
12
13 import com.mvp.presenter.UserPresenter;
14
15 public class MainActivity extends Activity implements UserView, OnClickListener {
16     private TextView tv_show;
17     private EditText et_username, et_pwd;
18     private Button btn_save, btn_clear;
19     private UserPresenter userPresenter;
20     private Context context;
21
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.activity_main);
26         initView();
27     }
28
29     private void initView() {
30         userPresenter = new UserPresenter(this);
31         tv_show = (TextView) findViewById(R.id.tv_show);
32         et_username = (EditText) findViewById(R.id.et_username);
33         et_pwd = (EditText) findViewById(R.id.et_pwd);
34         findViewById(R.id.btn_save).setOnClickListener(this);
35         findViewById(R.id.btn_clear).setOnClickListener(this);
36     }
37
38     @Override
39     public void onClick(View v) {
40         switch (v.getId()) {
41         case R.id.btn_save:
42             userPresenter.login(getUserName(), getPwd());
43             break;
44         case R.id.btn_clear:
45             break;
46         }
47     }
48
49     @Override
50     public String getUserName() {
51         return et_username.getText().toString();
52     }
53
54     @Override
55     public String getPwd() {
56         return et_pwd.getText().toString();
57     }
58
59     @Override
60     public void showDialog(String title) {
61         new AlertDialog.Builder(this).setTitle(title)
62                 .setPositiveButton("确定", null).setNegativeButton("取消", null)
63                 .show();
64     }
65 }

转载于:https://www.cnblogs.com/stayreal/p/5098492.html

android Mvp简单实用相关推荐

  1. android mvp简单的例子,Android MVP 模式的简单实现

    一.概述 MVP(Model-View-Presenter) 是总所周知MVC模式的一个演变,他们的主要目的都是划分模块职责,降低模块耦合,易测试,提高代码复用,网上有很多相关的知识,这里仅是个人看法 ...

  2. android 仿旅游日历控件_SuperCalendar 仿小米的Android 开源简单实用的日历表

    看到本篇文章的同学估计也是实验课或者项目需求中需要一个日历表,当我接到这个需求的时候,当时脑子压根连想都没想,这么通用的控件,GitHub上一搜一大堆不是嘛.可是等到真正做起来的时候,扎心了老铁,Gi ...

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

    Android  MVP 架构下  最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...

  4. Android客户端连接服务器- OKHttp的简单实用方法

    文章目录 一 .OKHttp简介 二. OkHttp3使用 1.创建HTTPClient实例 2.Get请求 3.POST请求 三.Timeouts(超时) **写在前面:本文只是对OKHttp3的简 ...

  5. Android中MaterialSearchView(搜索框)的简单实用

    Android中MaterialSearchView(搜索框)的简单实用 收搜框架有好多,动画效果满炫酷的就是代码太多,没发抽取他的搜索功能,而这个却比较好用些,直接从代码里面抠出来一个简单实现搜索功 ...

  6. Android简单实用的交互动画库

    简单实用的Android交互动画库SpringingLayout 一直以来我都对Android界面效果和交互动画特别的着迷,而且每次做工程都需要重写一大堆的组件,动画,感觉颇为繁杂,于是趁着有空闲做了 ...

  7. android ratingbar 高度,简单实用的自定义AndroidRatingBar

    作为一个初级小菜逼码农,刚做的几个项目都有设计到评分这一块的功能(感觉很少有应用不做吧--),系统自带的ratingbar用来用去真是费劲,背景图片还得去单独建立一个资源文件,用起来很是不简洁,就琢磨 ...

  8. Android MVP模式简单易懂的介绍方式 (一)

    Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式 ...

  9. android加法服务类,iOS越来越像Android:苹果简单做加法远离精致

    原标题:iOS越来越像Android:苹果简单做加法远离精致 刚刚结束的WWDC2016的主题演讲中,苹果为我们带来了最新的iOS 10系统,官方称本次iOS 10的推出有着多大10项的重要更新,在用 ...

最新文章

  1. 梯度下降算法_神经网络梯度下降算法
  2. TLB的作用及工作原理
  3. three approaches to industrial experiences at cambridge
  4. spring mvc 接收List数组类型参数
  5. Elasticsearch的前后台运行与停止(tar包方式)
  6. Doris之分区缓存(全面)
  7. Redhat Linux Enterprise Server 5.5 x86_64位操作系统Karachi时区问题?
  8. linux 查看进程存在时间
  9. iphone 相机拍摄比例_在iPhone上拍摄:Apple如何解决Deepfakes和其他媒体操纵问题
  10. 无责任书评——DOOM启示录 BORLAND传奇
  11. 微积分基础1-微分篇
  12. web全栈前端学习路线-20个真实web开发项目集合
  13. 电机计算机仿真,电机调速系统的计算机仿真
  14. 安装WIN8提示Error Code:0x0000005D的解决办法
  15. 封装自己的js库(二)---仿照JQuery
  16. 【数据库】PostgreSQL简介
  17. 如何修改pdf文件内容并保存
  18. 信息系统项目管理师知识总结
  19. java SSM 多数据源
  20. 初学者如何学习C语言,C语言从入门到精通学习全路径

热门文章

  1. Android 时间维护服务 TimeService(针对于特殊定制设备)
  2. 前端开发利器—FIDDLER 转
  3. :nth-child和:nth-of-type之间的差异
  4. 为什么使用 Redis及其产品定位
  5. [转]Sql Server参数化查询之where in和like实现详解
  6. Linux常用命令笔记---创建私有YUM源
  7. 分享:TreeFrog 1.1 发布,C++ Web 应用开发框架
  8. 从武侠门派的角度去解释域、域树、林的含义(下)
  9. 想开发一个背单词的学习软件
  10. 百度路书 信息显示_学会用地图制作路书,分分钟从小白变成自驾游达人