开发一个好项目:七、创建Contract类,连接presenter和view

来源:互联网 发布:上证指数如何计算 知乎 编辑:程序博客网 时间:2024/05/23 17:25

前一篇文章:开发一个好项目:六、创建数据源,创建数据仓库 框架地址 dileber android框架 希望大家能多多star一下

Contract类帮助presenter和view进行一个连接的操作
View继承于BaseView (中含有一些公用的方法)
Presenter 继承于BasePresenter(中含有一些公用的方法)

注释我也写的很清楚,可以看一下。

public interface LoginContract {    interface View extends BaseView<Presenter>{        //跳转主页        void toHome();        //获取页面上的用户model        UserModel getUser();    }    interface Presenter extends BasePresenter{        //从数据仓库里验证用户是否可以登录        void checkUser();        //拿到当前用户登录后的信息        void getUser();    }}

接下来创建一个presenter 继承LoginContract.Presenter
再创建一个View(view有两种,目前可知道的是Fragment和Activity)继承LoginContract.View

现在这里创建一个Presenter,下一章节再创建View(关联的东西比较多,此章不多做介绍)

mView.setPresenter(this); 将presenter给view设置
mUserDataSource设置dataSource

public class LoginPresenter implements LoginContract.Presenter{    LoginContract.View mView;    UserRepository mUserDataSource;    public LoginPresenter(@NonNull LoginContract.View view, @NonNull UserDataSource userDataSource){        mView = view;        mUserDataSource = userDataSource;        mView.setPresenter(this);    }    @Override    public void checkUser() {        final UserModel userModel = mView.getUser();        if(userModel==null){            mView.toast("用户为空", Toast.LENGTH_SHORT);            return;        }        final String userName = userModel.getUsername();        final String pass = userModel.getUserpass();        if(!UText.checkEditText(userName,6)||!UText.checkEditText(pass,6)){            mView.toast("账号或密码不能小于6位数", Toast.LENGTH_SHORT);            return;        }        checkUser(userModel);    }    private void checkUser(final UserModel userModel){        mView.loading();        mUserDataSource.checkUser(userModel, new BaseDataSource.BaseCallback<UserWrapper>() {            @Override            public void onSuccess(UserWrapper userWrapper) {                if(userWrapper.getState()== NetWorkEnum.Success.getVar()){                    UserModel userModel1 = userWrapper.getData();                    if(userModel1==null){                        mView.showAlert(UDialog.DIALOG_ERROR,"用户异常");                        mUserDataSource.clearUser();                    }else{                        userModel1.setUserpass(userModel.getUserpass());                        mUserDataSource.saveUser(userModel1);                        login(String.valueOf(userModel.getUserid()),HSafe.getHashValue(userModel.getUserpass()+HSafe.getHashValue(userModel.getUsername(), HSafe.HashMethod.sha1), HSafe.HashMethod.sha1));                        toHome(userModel1);                    }                }else if(userWrapper.getState()==NetWorkEnum.Error.getVar()){                    mView.showAlert(UDialog.DIALOG_ERROR,userWrapper.getMsg());                    mUserDataSource.clearUser();                }                mView.loadDialogDismiss();            }            @Override            public void onFailure(DataSourceException e) {                mView.showAlert(UDialog.DIALOG_ERROR,e.getMessage());                mView.loadDialogDismiss();                mUserDataSource.clearUser();            }        });    }    @Override    public void getUser() {        mUserDataSource.getUser(new BaseDataSource.BaseCallback<UserModel>() {            @Override            public void onSuccess(UserModel userModel) {                toHome(userModel);            }            @Override            public void onFailure(DataSourceException e) {            }        });    }    private void toHome(UserModel userModel){        mView.toHome();        mView.toast("欢迎" + userModel.getUsername(), Toast.LENGTH_SHORT);    }    @Override    public void start() {    }    @Override    public void onDestroy() {    }}
0 0
原创粉丝点击