为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Android

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

    }
}
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消