zoukankan      html  css  js  c++  java
  • Android MVP框架实现登录案例

    一、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();
                        }
                    });
                }
            });
        }
    }

    四、实现效果

  • 相关阅读:
    关于【无法将*.dll复制到指定目录】错误的解决
    给一个容器控件内(如:div,form)文本框批量添加验证事件
    js操作dom(2)
    关于.net中修饰符的一点总结
    js操作dom(3)
    关于【源文件与模块生成时的文件不同】问题的解决
    pb中用OLE Control 报错解决方法 (转载)
    Web前端技术(摘抄)
    Uva1420 Priest John's Busiest Day
    UVa1445 Cubist Artwork
  • 原文地址:https://www.cnblogs.com/chenzheng8975/p/10900588.html
Copyright © 2011-2022 走看看