一、Model

package com.czhappy.mvpdemo.model;

/**
* author: chenzheng
* created on: 2019/5/16 11:06
* description:
*/
public class User { public String username;
public String password;
}
package com.czhappy.mvpdemo.biz;

import com.czhappy.mvpdemo.model.User;

/**
* author: chenzheng
* created on: 2019/5/16 11:08
* description:
*/
public interface UserLoginListener { public void loginSuccess(User user); public void loginFailed();
}
package com.czhappy.mvpdemo.biz;

/**
* author: chenzheng
* created on: 2019/5/16 11:07
* description:
*/
public interface IUserLoginBiz { public void login(String username, String password, UserLoginListener userLoginListener);
}
package com.czhappy.mvpdemo.biz;

import com.czhappy.mvpdemo.model.User;

/**
* author: chenzheng
* created on: 2019/5/16 11:10
* description:
*/
public class UserLoginBiz implements IUserLoginBiz {
@Override
public void login(final String username, final String password, final UserLoginListener userLoginListener) { new Thread() {
@Override
public void run() {
super.run();
try {
Thread.sleep(2000);
if ("admin".equals(username) && "123".equals(password)) {
User user = new User();
user.username = username;
user.password = password;
userLoginListener.loginSuccess(user);
} else {
userLoginListener.loginFailed();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
}

二、View

package com.czhappy.mvpdemo.view;

import com.czhappy.mvpdemo.model.User;

/**
* author: chenzheng
* created on: 2019/5/16 11:26
* description:
*/
public interface IUserLoginView { public void showLoading();
public void hideLoading();
public String getUsername();
public String getPassword();
public void toMainActivity(User user);
public void showLoginFailed();
}
package com.czhappy.mvpdemo.activity;

import android.os.Bundle;
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.ProgressBar;
import android.widget.Toast; import com.czhappy.mvpdemo.R;
import com.czhappy.mvpdemo.model.User;
import com.czhappy.mvpdemo.presenter.UserLoginPresenter;
import com.czhappy.mvpdemo.view.IUserLoginView; /**
* author: chenzheng
* created on: 2019/5/16 10:41
* description:
*/
public class LoginActivity extends AppCompatActivity implements IUserLoginView{ private EditText username_et, password_et;
private Button login_btn;
private ProgressBar progressBar;
private UserLoginPresenter userLoginPresenter = new UserLoginPresenter(this);
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login); initView();
} private void initView() {
username_et = findViewById(R.id.username_et);
password_et = findViewById(R.id.password_et);
login_btn = findViewById(R.id.login_btn);
progressBar = findViewById(R.id.progressBar); login_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
userLoginPresenter.login();
}
});
} @Override
public void showLoading() {
progressBar.setVisibility(View.VISIBLE);
} @Override
public void hideLoading() {
progressBar.setVisibility(View.GONE);
} @Override
public String getUsername() {
return username_et.getText().toString();
} @Override
public String getPassword() {
return password_et.getText().toString();
} @Override
public void toMainActivity(User user) {
Toast.makeText(this, "登录成功", Toast.LENGTH_LONG).show();
} @Override
public void showLoginFailed() {
Toast.makeText(this, "登录失败", Toast.LENGTH_LONG).show();
}
}

三、Presenter

Presenter是用作Model和View之间交互的桥梁

package com.czhappy.mvpdemo.presenter;

import android.os.Handler;

import com.czhappy.mvpdemo.biz.IUserLoginBiz;
import com.czhappy.mvpdemo.biz.UserLoginBiz;
import com.czhappy.mvpdemo.biz.UserLoginListener;
import com.czhappy.mvpdemo.model.User;
import com.czhappy.mvpdemo.view.IUserLoginView; /**
* author: chenzheng
* created on: 2019/5/16 11:13
* description:
*/
public class UserLoginPresenter { private IUserLoginBiz userLoginBiz;
private IUserLoginView userLoginView;
private Handler mHandler = new Handler(); public UserLoginPresenter(IUserLoginView userLoginView) {
this.userLoginView = userLoginView;
userLoginBiz = new UserLoginBiz();
} public void login(){
userLoginView.showLoading();
userLoginBiz.login(userLoginView.getUsername(), userLoginView.getPassword(), new UserLoginListener() {
@Override
public void loginSuccess(final User user) {
//需要在UI线程执行
mHandler.post(new Runnable()
{
@Override
public void run()
{
userLoginView.toMainActivity(user);
userLoginView.hideLoading();
}
});
} @Override
public void loginFailed() {
//需要在UI线程执行
mHandler.post(new Runnable()
{
@Override
public void run()
{
userLoginView.showLoginFailed();
userLoginView.hideLoading();
}
});
}
});
}
}

四、实现效果

Android MVP框架实现登录案例的更多相关文章

  1. 基于Struts2框架实现登录案例 之 使用Struts2标签库简化表单+继承ActionSupport完成输入交验

    一,使用Struts2标签库简化表单 在文章[基于Struts2框架实现登录案例]的基础上,通过使用Struts标签库可以简化登录页面login2.jsp <%@ page language=& ...

  2. 如何实现自己的Android MVP框架?

    相信熟悉android开发的童鞋对MVP框架应该都不陌生吧,网上很多关于android中实现MVP的文章,大家可以直接搜索学习.这些文章中,MVP的实现思路基本都是把Activity.Fragment ...

  3. Django框架之登录案例

    内容: (1)request.GET和request.POST (2)获取get方法提交和post方法提交的数据 一.登录案例 登录逻辑代码 def login(request): if reques ...

  4. Android MVP框架模式

    结合前一篇MVC框架模式 为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念的MVP(Mode ...

  5. android MVP框架

    原文地址:http://blog.csdn.net/guxiao1201/article/details/40147209 在开发Android应用时,相信很多同学遇到和我一样的情况,虽然项目刚开始构 ...

  6. 基于Struts2框架实现登录案例 之 程序国际化

    国际化牵涉的知识非常多,这里只能简单的介绍,程序国际化的一般做法是:在jsp页面时, 不是直接输出信息,而是输出一个key值,该key值在不同语言环境下找到对应资源文件下的 对应信息,因此首先要创建满 ...

  7. 基于Struts2框架实现登录案例

    一,准备工作  1)新建web项目,并导入Struts2jar文件和配置web.xml文件. struts2 jar文件 web.xml文件 <?xml version="1.0&qu ...

  8. Android MVP Presenter 中引发的空指针异常

    一.概述 最近对 googlesamples/android-architecture 中的 MVP-dagger 进行了学习.对照项目的 MVP-dagger 分支,对 MVP-dagger 进行了 ...

  9. android mvp高速开发框架介绍(继续dileber)

    android mvp框架:dileber(https://github.com/dileber/dileber.git) 继续为大家介绍android mvp开源框架 dileber 官方交流qq群 ...

随机推荐

  1. ARTS-week1

    Algorithm 小A 和 小B 在玩猜数字.小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜.他们一共进行三次这个游戏,请返回 小A 猜对了几次? 输入的 ...

  2. 批量插入实体类转化DataTable

    /// <summary> /// 根据实体类得到表结构 /// </summary> /// <param name="model">实体类& ...

  3. 36氪新风向 | 三个月估值普涨三倍,你未来的RPA机器人同事正在路上

    http://www.sohu.com/a/320208242_114778 2019 年 4 月,关注 RPA 赛道的投资人 Kevin(化名)就发现,仅仅过了一个春节,自己所在的早期基金已经投不起 ...

  4. npm中的学习课程

    我也不知道叫什么名字好 进入 https://nodeschool.io/zh-cn/,你能够看到许多课程. 这些课程大多面向零基础的,非常有趣(类似于许多关卡的小游戏). 快速开始 首先,确定你的电 ...

  5. Tensorflow可视化-P295-Tensorboard可视化

    各模块含义 1>表示一个Batch的大小是不确定的 2>当两个节点之间传输的张量多与1时,可视化效果图将只显示张量的个数 3>效果图上的粗细表示两个节点之间传输的标量维度的总大小,而 ...

  6. python 字符串方法整理

    Python字符串方法 1.大小写转换 1.1 lower.upper lower():小写 upper():大写 1.2 title.capitalize S.title():字符串中所有单词首字母 ...

  7. bg/fg

    将一个在后台暂停的命令,变成继续执行 (在后台执行). 一般ctrl+z就把前台命令调到了后台 将后台中的命令调至前台继续运行

  8. SVN 常用 还原项目

    1.先修改本来两个文件,然后再提交到SVN 2.在日志界面,查看提交的文件,找到对应的版本号 3.找到对应的版本号(这里的版本号是1995,我提交生成的版本号 的前一个版本 才是我未作出修改的版本), ...

  9. Debian 9 安装 libsodium

    到这里查看最新的版本号.如现在最新的版本号为1.0.18.下面均以该版本为例. 下载.编译和安装: wget https://download.libsodium.org/libsodium/rele ...

  10. sdcf day1 qwq比赛题解

    目录 写在前面 A 链接 思路 代码 B 链接 翻译 思路 代码 C 链接 翻译 思路 代码 写在前面 来到夏令营的第一场比赛,全是水题(第一题除外,不过是原题还是之前做过的,而且是并查集的果题,咕咕 ...