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

 

四、实现效果

posted @ 2019-05-21 16:28  chenzheng8975  阅读(1138)  评论(0编辑  收藏  举报