一、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. 0031ActiveMQ的下载安装与启动

    消息中间件activemq的作用主要是解耦.异步.削峰. 我们按如下步骤详细讲解一下activemq的下载.安装与启动. 1.activemq的下载 下载地址: http://activemq.apa ...

  2. SpringMVC的全局异常处理

    @ControllerAdvice的使用 我们都知道做项目一般都会有全局异常统一处理的类,那么这个类在Spring中可以用@ControllerAdvice来实现. @ControllerAdvice ...

  3. python的next()函数

    next(iterobject,defalt)函数的第一个参数是一个可迭代对象,第二个参数可以不写.不写的时候,如果可迭代对象的元素取出完毕,会返回StopIteration.如果第二个参数写一个其他 ...

  4. php web开发——文件的上传和下载

    PHP用超级全局变量数组$_FILES来记录文件上传相关信息的. 1.file_uploads=on/off 是否允许通过http方式上传文件 2.max_execution_time=30 允许脚本 ...

  5. Tomcat启动服务报错:Unknown version string [4.0]. Default version will be used.

    Tomcat.jdk.web.xml 对应关系: 版本对应错误,更换便可.(版本往下兼容) web.xml——version2.2——JDK1.1——Tomcat3.3 web.xml——versio ...

  6. 推荐一款分布式微服务框架 Surging

    surging   surging 是一个分布式微服务框架,提供高性能RPC远程服务调用,采用Zookeeper.Consul作为surging服务的注册中心,集成了哈希,随机,轮询,压力最小优先作为 ...

  7. 22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

    https://www.cnblogs.com/yangfengwu/p/11192618.html 有些很细致的东西参考这篇   https://www.cnblogs.com/yangfengwu ...

  8. 洛谷 P2312 解方程 题解

    P2312 解方程 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 [1,m][1,m] 内的整数解(\(n\) 和 \(m\) 均为 ...

  9. 关于集成通用mapper的Mybatis代码生成器产生的model类注解

    主要是@Table.@Id.@GeneratedValue.@Column 4个注解 这四个注解都来自javax.persistence包,是Java持久层规范,单纯的Mybatis并不认识这四个注解 ...

  10. OpenFOAM——同心环中的自然对流

    本算例来自<ANSYS Fluid Dynamics Verification Manual>中的VMFL009: Natural Convection in a Concentric A ...