一、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. 10. vue-router命名路由

    命名路由的配置规则 为了更加方便的表示路由的路径,可以给路由规则起一个别名, 即为"命名路由". const router = new VueRouter ({ routes: [ ...

  2. linux中>/dev/null 2>&1和2>&1 > /dev/null

    转载:https://www.cnblogs.com/520playboy/p/6275022.html 背景 我们经常能在shell脚本中发现>/dev/null 2>&1这样的 ...

  3. msdtc不可用

    在使用“经销商园地 网上订单处理程序”等程序时,如果程序报:服务器×××上的MSDTC不可用”,可以按照以下方法进行解决: 在windows控制面版-->管理工具-->服务-->Di ...

  4. LeetCode 439. Ternary Expression Parser

    原题链接在这里:https://leetcode.com/problems/ternary-expression-parser/description/ 题目: Given a string repr ...

  5. create系列创建节点的方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. C++函数声明后面加throw()的作用

    原文地址:https://blog.csdn.net/to_baidu/article/details/53763683 C++里面为什么有时候在函数声明的时候在后面加throw()关键字? 解释: ...

  7. C# await async Task

    //原文:https://www.cnblogs.com/yan7/p/8401681.html //原文:https://www.cnblogs.com/s5689412/p/10073507.ht ...

  8. 使用css3变量创建炫酷悬停效果

    原文地址:www.zcfy.cc/article/stunning-hover-effects-with-css-variables 效果: 主要使用css中的var做动画效果,代码如下: <! ...

  9. (13)Go接口

    接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节. 接口 接口类型 在Go语言中接口(interface)是一种类型,一种抽象的类型. interfa ...

  10. 平安银行Java面试-社招-五面(2019/09)

    个人情况 2017年毕业,普通本科,计算机科学与技术专业,毕业后在一个二三线小城市从事Java开发,2年Java开发经验.做过分布式开发,没有高并发的处理经验,平时做To G的项目居多.写下面经是希望 ...