MVP模式登陆

model层

public class LoginModelImp implements LoginModel {

    @Override
    public void login(String accoutm, String pwd, OnNetListener onNetListener) {
        Map<String, String> params = new HashMap<>();
        params.put("mobile", accoutm);
        params.put("password", pwd);
        OkhttpUtils.getInstance().login(Api.LGOIN_URL, params, onNetListener);
    }

}

presenter层

public class LoginPresenterImp implements LoginPresenter {
    private LoginView loginView;
    private final LoginModelImp loginModelImp;


    public LoginPresenterImp(LoginView loginView) {
        //绑定
        this.loginView = loginView;
        //初始化model层的对象
        loginModelImp = new LoginModelImp();
    }


    //登录
    @Override
    public void login() {
        //该方法不做真正的业务逻辑即不写请求网络的方法,交给Model层去处理


        //获取用户名和密码
        String accout = loginView.getAccout();
        String pwd = loginView.getPwd();
        if (TextUtils.isEmpty(accout) || TextUtils.isEmpty(pwd)) {
            //提示用户输入账号密码不正确
            loginView.showMsg("输入账号密码不正确");
            return;
        }
        //进行网络请求
        loginView.showLoading();
        loginModelImp.login(accout, pwd, new OnNetListener() {
            @Override
            public void onSuccess(String result) {
                if (loginView == null) {
                    return;
                }
                loginView.dismissLoading();
                UserBean userBean = new Gson().fromJson(result, UserBean.class);
                loginView.showData(userBean.getData().getMobile());
            }


            @Override
            public void onFailed(Exception e) {
                if (loginView == null) {
                    return;
                }
                loginView.dismissLoading();
            }
        });
    }


    //解绑
    @Override
    public void detach() {
        if (loginView != null) {
            loginView = null;
        }
    }

}

view层

/**
 * 以MVP的角度来看,Actiivty对应的就是V(view)
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener,LoginView {
    Handler handler = new Handler();
    private LoginPresenterImp loginPresenterImp;
    /**
     * 请输入账号
     */
    private EditText mEtAccount;
    /**
     * 请输入密码
     */
    private EditText mEtPwd;
    /**
     * 登录
     */
    private Button mBtLogin;
    private TextView mTv;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        loginPresenterImp = new LoginPresenterImp(this);
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        loginPresenterImp.detach();
    }


    private void initView() {
        mEtAccount = (EditText) findViewById(R.id.etAccount);
        mEtPwd = (EditText) findViewById(R.id.etPwd);
        mBtLogin = (Button) findViewById(R.id.btLogin);
        mBtLogin.setOnClickListener(this);
        mTv = (TextView) findViewById(R.id.tv);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.btLogin:
                //登录
                loginPresenterImp.login();
                break;
        }
    }


    @Override
    public String getAccout() {
        return mEtAccount.getText().toString();
    }


    @Override
    public String getPwd() {
        return mEtPwd.getText().toString();
    }


    @Override
    public void showLoading() {
        //进度显示
        Toast.makeText(MainActivity.this,"加载中...",Toast.LENGTH_SHORT).show();
    }


    @Override
    public void dismissLoading() {
        //关闭进度显示
        Toast.makeText(MainActivity.this,"加载完成",Toast.LENGTH_SHORT).show();
    }


    @Override
    public void showData(final String phone) {
        //显示号码
       /* runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mTv.setText(phone);
            }
        });*/
        mTv.setText(phone);
    }


    /**
     * 给用户提示一些信息,比如正确的,或者错误的
     * @param str
     */
    @Override
    public void showMsg(String str) {
        Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
    }
}



猜你喜欢

转载自blog.csdn.net/qq_40702815/article/details/80107975