android MVP 实践笔记

我是这样理解的

首先一个界面先看看需要哪些操作 ,已注册登录为例子
注册界面 一般有获取验证码,和注册的操作。界面上大概就是这几种,获取验证码成功,失败,注册成功失败,显示loading和隐藏而已。
那我就先写个interface -RegistView
RegistView

/**
 * 注册视图
 * Created by wushange on 2016/06/01.
 */
public interface RegistView {
    /**
     * 获取验证码成功
     */
    void OnShowSuccessGetCodeView();

    /**
     * 获取验证码失败
     */
    void OnshowFailGetCodeView();

    /**
     * 注册成功
     *
     * @param user
     */
    void onShowSuccessRegistView(String user);

    /**
     * 注册失败
     */
    void onShowFailedRegistView();


    /**
     * 显示loading
     */
    void showLoadingView();

    /**
     * 隐藏loading
     */
    void dissLoadingView();
}

有了接口就要实现他了,那就简单了,写个manager管理类, 这里面是真正的业务处理,所有的异步操作放在这里执行。比如登录 ,注册,获取验证码。
LoginAndRegistMananger

import com.dmcc.dmcc_crm.bean.User;

import org.xutils.common.util.LogUtil;

/**
 * 业务处理层
 */
public class LoginAndRegistMananger {
    /**
     * 获取验证码回掉
     * 需要什么参数自己添加就可以
     */
    public interface OnGetCodeLisener {
        void getCodeSuccess();
        void getCodeFail();
    }

    /**
     * 注册相关 回掉
     * 需要什么参数自己添加就可以
     */
    public interface OnRegistLisener {
        void registSuccess(String user);
        void registFailed();
    }

    /**
     * 登录相关 回掉
     * 需要什么参数自己添加就可以
     */
    public interface OnLoginListener {
        void loginSuccess(User user);
        void loginFailed();
    }

    public void getCode(final String phone, final OnGetCodeLisener onGetCodeLisener) {

        LogUtil.e("---模拟子线程耗时操作----");
        new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                LogUtil.e("---  模拟获取验证码成功----");
                onGetCodeLisener.getCodeSuccess();
            }
        }.start();
    }

    public void regist(final String username, final String password, final String code, final OnRegistLisener onRegistLisener) {
        LogUtil.e("---模拟子线程耗时操作----");
        new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                LogUtil.e("---  模拟注册成功----");
                onRegistLisener.registSuccess("注册成功");
            }
        }.start();
    }


    public void login(final String username, final String password, final OnLoginListener loginListener) {
        LogUtil.e("---模拟子线程耗时操作----");
        new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                LogUtil.e("---  模拟登录成功----");

                if ("111".equals(username) && "111".equals(password)) {
                    User user = new User();
                    user.setUserName(username);
                    user.setPassword(password);
                    loginListener.loginSuccess(user);
                } else {
                    loginListener.loginFailed();
                }
            }
        }.start();
    }

然后再写个presenter类 这个是activity层 获得数据的(我是这样子理解的)

LoginAndRegistPresenter实现

import com.dmcc.dmcc_crm.bean.User;
import com.dmcc.dmcc_crm.view.LoginView;
import com.dmcc.dmcc_crm.view.RegistView;

/**
 * p层
 */
public class LoginAndRegistPresenter {
    RegistView registView;
    LoginView loginView;
    LoginAndRegistMananger loginAndRegistMananger;

    /**
     * 登陆界面构造器
     *
     * @param loginView
     */
    public LoginAndRegistPresenter(LoginView loginView) {
        this.loginView = loginView;
        this.loginAndRegistMananger = new LoginAndRegistMananger();
    }

    /**
     * 注册界面构造器
     *
     * @param registView
     */
    public LoginAndRegistPresenter(RegistView registView) {
        this.registView = registView;
        this.loginAndRegistMananger = new LoginAndRegistMananger();
    }

    /**
     * 获取验证码
     * @param phone
     */
    public void getCode(String phone) {
        registView.showLoadingView();
        loginAndRegistMananger.getCode(phone, new LoginAndRegistMananger.OnGetCodeLisener() {
            @Override
            public void getCodeSuccess() {
                registView.OnShowSuccessGetCodeView();
                registView.dissLoadingView();
            }

            @Override
            public void getCodeFail() {
                registView.OnshowFailGetCodeView();
                registView.dissLoadingView();
            }
        });


    }

    /**
     * 注册
     * @param name
     * @param password
     * @param code
     */
    public void regist(String name, String password, String code) {
        registView.showLoadingView();
        loginAndRegistMananger.regist(name, password, code, new LoginAndRegistMananger.OnRegistLisener() {
            @Override
            public void registSuccess(String user) {
                registView.onShowSuccessRegistView(user);
                registView.dissLoadingView();
            }

            @Override
            public void registFailed() {
                registView.onShowFailedRegistView();
                registView.dissLoadingView();
            }
        });

    }

    /**
     * 登录
     * @param name
     * @param password
     */
    public void login(String name, String password) {
        loginView.showLoadingView();
        loginAndRegistMananger.login(name, password, new LoginAndRegistMananger.OnLoginListener() {
            @Override
            public void loginSuccess(User user) {
                loginView.onShowSuccessLoginView(user);
                loginView.dissLoadingView();

            }

            @Override
            public void loginFailed() {
                loginView.onShowFailedLoginView(0);
                loginView.dissLoadingView();
            }
        });
    }
}

最后就是使用了 在登陆界面
只需要实现loginview
然后调用 LoginAndRegistPresenter 实现登陆功能

/**
 * Created by wushange on 2016/06/01.
 */
public class LoginActivity extends BaseSwipeBackActivity implements LoginView {
    LoginAndRegistPresenter mloginPresenter = new LoginAndRegistPresenter(this);

    @ViewInject(R.id.login_btn)
    Button login;
    @ViewInject(R.id.go_reg_btn)
    Button go_reg_btn;
    @ViewInject(R.id.apptitle)
    AppTitle appTitle;

    @Override
    public int bindLayout() {
        return R.layout.activity_login_main_view;
    }

    @Override
    public void initView(View view) {
        appTitle.init(AppTitle.AppTitleStyle.BACK_TITLE);
        appTitle.setTitle("登陆");
        appTitle.setBackClickClisener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

    }

    @Override
    public void doBusiness(Context mContext) {

    }

    @Event(R.id.login_btn)
    private void setLogin(View v) {
        LogUtil.e("---setLogin----");
        mloginPresenter.login("111", "111");
    }

    @Event(R.id.go_reg_btn)
    private void setGo_reg_btn(View v) {
        AppUtils.startAct(getContext(), RegistActivity.class);
    }

    @Override
    public void onShowSuccessLoginView(User user) {
        LogUtil.e("---onShowSuccessLoginView----" + user.toString());
    }

    @Override
    public void onShowFailedLoginView(int error) {
        LogUtil.e("---onShowFailedLoginView----");
    }

    @Override
    public void showLoadingView() {
        LogUtil.e("---showLoginView----");
    }

    @Override
    public void dissLoadingView() {
        LogUtil.e("---dissLoginView----");
    }
}

注册界面同理

/**
 * Created by wushange on 2016/06/01.
 */
public class RegistActivity extends BaseSwipeBackActivity implements RegistView {
    LoginAndRegistPresenter mloginPresenter = new LoginAndRegistPresenter(this);

    @ViewInject(R.id.regist_btn)
    Button regist;

    @ViewInject(R.id.getcode_btn)
    Button getcode_btn;
    @ViewInject(R.id.apptitle)
    AppTitle appTitle;

    @Override
    public int bindLayout() {
        return R.layout.activity_regist_main_view;
    }

    @Override
    public void initView(View view) {
        appTitle.init(AppTitle.AppTitleStyle.BACK_TITLE);
        appTitle.setTitle("注册");
        appTitle.setBackClickClisener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

    }

    @Override
    public void doBusiness(Context mContext) {

    }

    @Event(R.id.regist_btn)
    private void setRegist(View v) {
        mloginPresenter.regist("111", "111", "1");
    }

    @Event(R.id.getcode_btn)
    private void setGetcode_btn(View v) {
        mloginPresenter.getCode("1564594066");
    }

    @Override
    public void onShowSuccessRegistView(String user) {
        LogUtil.e("--onShowSuccessRegistView---" + user);

    }

    @Override
    public void onShowFailedRegistView() {
        LogUtil.e("--onShowFailedRegistView---");
    }

    @Override
    public void OnShowSuccessGetCodeView() {
        LogUtil.e("--OnShowSuccessGetCodeView---");
    }

    @Override
    public void OnshowFailGetCodeView() {
        LogUtil.e("--OnshowFailGetCodeView---");
    }

    @Override
    public void showLoadingView() {
        LogUtil.e("--showLoadingView---");
    }

    @Override
    public void dissLoadingView() {
        LogUtil.e("--dissLoadingView---");
    }
}

以上是我自己本人今天看了下mvp的设计模式 我所领悟的。 做个笔记,还希望大家多多指教
欢迎大家加入我的qq交流群 74406192

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值