一、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. Python +urllib+urllib2 带数据的post请求实例

    #coding:utf-8 ''' Created on 2017年11月2日 @author: li.liu ''' import urllib import urllib2 import re f ...

  2. python 打印html源码中xpath

    实例: #coding:utf-8 from lxml import etree import urllib url=urllib.urlopen('http://www.baidu.com').re ...

  3. 与你一起学习MS Project——基础篇:Project基础应用

    为了更清晰容易地熟悉掌握Project的基础应用,我们在基础篇中一起来学习掌握在Project中如何做进度计划.资源计划.成本计划以及跟踪项目的执行情况并生成所需的项目报表. 一.进度计划 这里,首先 ...

  4. Spring源码窥探之:单实例Bean的创建过程

    finishBeanFactoryInitialization(beanFactory);初始化剩下的所有的单实例(非懒加载)Bean(Instantiate all remaining (non-l ...

  5. 五大开源 Web 代理服务器横评:Squid、Privoxy、Varnish、Polipo、Tinyproxy

    https://linux.cn/article-7119-1.html Web 代理软件转发 HTTP 请求时并不会改变数据流量.它们可以配置成透明代理,而无需客户端配置.它们还可以作为反向代理放在 ...

  6. [Codeforces 1265E]Beautiful Mirrors

    Description 题库链接 一共有 \(n\) 个关卡,你初始在第一个关卡.通过第 \(i\) 个关卡的概率为 \(p_i\).每一轮你可以挑战一个关卡.若通过第 \(i\) 个关卡,则进入第 ...

  7. Java中多态

    多态:把子类看成是父类,把实现类看成是接口,这样类就具有多种形态,称为多态. 在多态中访问成员变量,访问的是父类中的成员变量. 在多态中访问成员方法,先访问的是子类,看看子类有没有覆盖重写要访问的父类 ...

  8. 如何用okr做好目标规划

    有朋友和我吐槽公司总是规划一个个振奋人心的目标,让大家对工作充满了热情.然而好的开头却缺少追踪反馈没有好的结尾,那些大家所渴望达成的目标随着时间的流逝便逐渐没有了音信,不再有人主动提起,团队成员迎来的 ...

  9. WinDbg常用命令系列---.load, .loadby (Load Extension DLL)

    .load, .loadby (Load Extension DLL) 简介 .load和.loadby命令将新的扩展DLL加载到调试器中. 使用形式 .load DLLName !DLLName.l ...

  10. Dump文件的校验查看工具

    当我们抓取到Dump文件后,我们抓取的方式对不对,是否包含了我们想要的信息,可不可用,又或这个文件在抓取或传输过程种,有没有损坏,又或者我不想用Windbg进行细致的分析,只想大概了解下异常信息,在这 ...