MVP模式的学习2

目录

创建bean 

创建Model的接口

创建Model的实现类

创建View

创建Persenter

MainActivity中调用

布局文件


学习博客:

Android MVP模式之模拟登陆功能

上一篇博客的基础上对model层的逻辑进行了剥离

创建bean 

User
package demo.ad.com.mvpdemo.model;

/**
 * Created by Firely.Chen Computer on 18/7/28.
 */

public class User {
    private String userName;
    private String passWord;

    public String getUserName() {
        return userName;
    }

    public void setUserName(final String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public User(final String userName, final String passWord) {
        this.userName = userName;
        this.passWord = passWord;
    }

    public void setPassWord(final String passWord) {
        this.passWord = passWord;
    }

    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                '}';
    }
}

创建Model的接口

interface IUserMode
package demo.ad.com.mvpdemo.model;

/**
 * Created by Firely.Chen Computer on 18/7/28.
 */

public interface IUserMode {
    /**
     * 登录
     *
     * @param user
     * @return 约定返回"true"为登录成功,其他为登录失败的错误信息
     */
    boolean login(User user);
}

创建Model的实现类

UserMode
package demo.ad.com.mvpdemo.model;

/**
 * Created by Firely.Chen Computer on 18/7/28.
 */

public class UserMode implements IUserMode{
    /**
     * 登录
     *
     * @param user
     * @return 约定返回"true"为登录成功,其他为登录失败的错误信息
     */
    @Override
    public boolean login(final User user) {
        if (user.getUserName().equals("cjd") && user.getPassWord().equals("123")) {
            return true;
        }
        return false;
    }
}

创建View

interface IUserView
package demo.ad.com.mvpdemo.view;

/**
 * Created by Firely.Chen Computer on 18/7/28.
 */

public interface IUserView {
    /**
     * 登录成功
     */
    void onLoginSuccess();

    /**
     * 登录失败
     *
     */
    void onLoginFailed();
}

创建Persenter

UserPresenter
package demo.ad.com.mvpdemo.presenter;

import android.os.Handler;
import android.os.Message;

import demo.ad.com.mvpdemo.model.IUserMode;
import demo.ad.com.mvpdemo.model.User;
import demo.ad.com.mvpdemo.model.UserMode;
import demo.ad.com.mvpdemo.view.IUserView;

/**
 * Created by Firely.Chen Computer on 18/7/28.
 */

public class UserPresenter {
    private IUserMode userMode;
    private IUserView userView;


    public UserPresenter(final IUserView userView) {
        this.userView = userView;
        userMode = new UserMode();
    }

    public void login(final User user) {
        new Thread() {
            @Override
            public void run() {
                super.run();
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                boolean loginResult = userMode.login(user);
                if (loginResult) {
                    userView.onLoginSuccess();
                } else {
                    userView.onLoginFailed();
                }
            }
        }.start();


    }
}

MainActivity中调用

package demo.ad.com.mvpdemo.view;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import demo.ad.com.mvpdemo.R;
import demo.ad.com.mvpdemo.model.User;
import demo.ad.com.mvpdemo.presenter.UserPresenter;

/**
 * MVP的学习
 * 传统MVC存在的问题:
 * Activity负担过重,Activity即扮演了View的角色又扮演了Controller的角色
 * MVP的优势:降低耦合,减轻Activity的负担
 * MVP中View和Model间的交互只能通过Presenter()以接口的形式
 * https://blog.csdn.net/qq_39085422/article/details/78412977?locationNum=6&fps=1
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener, IUserView {

    private EditText et_username;
    private EditText et_password;
    private Button bt_login;
    private UserPresenter userPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        userPresenter = new UserPresenter(this);
    }

    private void initView() {
        et_username = (EditText) findViewById(R.id.et_username);
        et_password = (EditText) findViewById(R.id.et_password);
        bt_login = (Button) findViewById(R.id.bt_login);
        bt_login.setOnClickListener(this);
    }

    @Override
    public void onClick(final View view) {
        String passWord = et_password.getText().toString();
        String userName = et_username.getText().toString();
        if (!TextUtils.isEmpty(userName) && !TextUtils.isEmpty(passWord)) {
            userPresenter.login(new User(userName, passWord));

        } else {
            Toast.makeText(this, "用户名和密码不能为空", Toast.LENGTH_SHORT).show();
        }
    }

    /**
     * 登录成功
     */
    @Override
    public void onLoginSuccess() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();

            }
        });
    }

    /**
     * 登录失败
     */
    @Override
    public void onLoginFailed() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();

            }
        });
    }


}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="demo.ad.com.mvpdemo.view.MainActivity">

    <EditText
        android:id="@+id/et_username"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:hint="请输入用户名"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <EditText
        android:id="@+id/et_password"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:hint="请输入密码"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/et_username"/>

    <Button
        android:id="@+id/bt_login"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="12dp"
        android:text="登录"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/et_password"/>
</android.support.constraint.ConstraintLayout>

猜你喜欢

转载自blog.csdn.net/aaadaaaada/article/details/81261914