继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

慕码人3916992
关注TA
已关注
手记 98
粉丝 81
获赞 3602

前一篇文章:开发一个好项目:六、创建数据源,创建数据仓库 框架地址 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() {

    }
}
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP