android MVP 实践笔记

来源:互联网 发布:网络电子游艺坑人 编辑:程序博客网 时间:2024/05/16 19:20

我是这样理解的

首先一个界面先看看需要哪些操作 ,已注册登录为例子
注册界面 一般有获取验证码,和注册的操作。界面上大概就是这几种,获取验证码成功,失败,注册成功失败,显示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

0 0
原创粉丝点击