一张图对于MVP架构的理解

对于Mvp架构的一点理解,如下图所示:

Mvp架构的理解

项目包结构示例:
包结构
关键类:
ILoginModel 接口类

public interface ILoginModel {
    void doLogin(HashMap<String, String> params, IBaseListener<ResLogin> iBaseListener);
}

LoginModel实现类

public class LoginModel implements ILoginModel {
    @Override
    public void doLogin(HashMap<String, String> params, final IBaseListener<ResLogin> iBaseListener) {
        //对应的网络请求
        VolleyRequestUtil.RequestPost(Constant.req_base + Constant.req_login, "login", params, new VolleyListenerInterface(VolleyListenerInterface.mListener, VolleyListenerInterface.mErrorListener) {
            @Override
            public void onMySuccess(String result) {
                ResLogin resLogin = GsonUtil.getGsonUtil().getBean(result, ResLogin.class);
                iBaseListener.onSuccess(resLogin);
            }

            @Override
            public void onMyError(VolleyError error) {
                iBaseListener.onFailed(error.getMessage());
            }
        });
    }
}

LoginActivity UI界面

public class LoginActivity extends AppCompatActivity implements ILoginView {

    private AutoCompleteTextView mEmailView;
    private EditText mPasswordView;
    private View mProgressView;
    private View mLoginFormView;
    private Button mEmailSignInButton;
    private LoginPresenter mPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        mPresenter = new LoginPresenter(this);
        findViews();
        initViews();
    }

    private void findViews() {
        mEmailView = findViewById(R.id.email);
        mPasswordView = findViewById(R.id.password);
        mLoginFormView = findViewById(R.id.login_form);
        mProgressView = findViewById(R.id.login_progress);
        mEmailSignInButton = findViewById(R.id.email_sign_in_button);
    }

    private void initViews() {
        mEmailSignInButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mPresenter.login();
            }
        });
    }

    @Override
    public void setLoginSuccess(ResLogin resLogin) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("userId", resLogin.getRetObj().getUserId());
        startActivity(intent);
    }

    @Override
    public void setLoginFailed(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void showProgress() {
        mLoginFormView.setVisibility(View.GONE);
        mProgressView.setVisibility(View.VISIBLE);
    }

    @Override
    public void hideProgress() {
        mLoginFormView.setVisibility(View.VISIBLE);
        mProgressView.setVisibility(View.GONE);
    }

    @Override
    public String getUserName() {
        return mEmailView.getText().toString().trim();
    }

    @Override
    public String getPassword() {
        return mPasswordView.getText().toString().trim();
    }

    @Override
    public void showCheckResult(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }
}

ILoginView P与V交互类

public interface ILoginView {

    void setLoginSuccess(ResLogin resLogin);

    void setLoginFailed(String msg);

    void showProgress();

    void hideProgress();

    String getUserName();

    String getPassword();

    void showCheckResult(String msg);
}

LoginPresenter协调者

public class LoginPresenter {
    private ILoginModel iLoginModel;
    private ILoginView iLoginView;

    public LoginPresenter(ILoginView iLoginView) {
        this.iLoginView = iLoginView;
        iLoginModel = new LoginModel();
    }

    public String checkUserName(String userName) {
        if (TextUtils.isEmpty(userName)) {
            return "请输入用户名";
        }
        return null;
    }

    public String checkPassword(String password) {
        if (TextUtils.isEmpty(password)) {
            return "请输入密码";
        }
        if (password.length() < 6 || password.length() > 16) {
            return "密码格式错误,长度应为6~16位";
        }
        return null;
    }

    public HashMap<String, String> getParams() {
        HashMap<String, String> map = new HashMap<>();
        String name = iLoginView.getUserName();
        String psd = iLoginView.getPassword();
        String jsonParams = "{\"account\":\"" + name + "\",\"password\":\"" + psd + "\",\"appType\":\"test\"}";
        map.put("jsonParams", jsonParams);
        return map;
    }

    public void login() {
        String uName = iLoginView.getUserName();
        String uPsd = iLoginView.getPassword();
        String error;
        if ((error = checkUserName(uName)) != null) {
            iLoginView.showCheckResult(error);
            return;
        }
        if ((error = checkPassword(uPsd)) != null) {
            iLoginView.showCheckResult(error);
            return;
        }

        iLoginView.showProgress();
        iLoginModel.doLogin(getParams(), new IBaseListener<ResLogin>() {
            @Override
            public void onSuccess(ResLogin resLogin) {
                iLoginView.hideProgress();
                if (resLogin != null && resLogin.getRetCode() == 0) {
                    iLoginView.setLoginSuccess(resLogin);
                } else {
                    iLoginView.setLoginFailed("no object");
                }
            }

            @Override
            public void onFailed(String msg) {
                iLoginView.hideProgress();
                iLoginView.setLoginFailed(msg);
            }
        });
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值