mvp(二)

1.需求登陆


1.BasePresenter


/**
 * basePreseter
 * @author DEV-81
 */

public abstract class BasePresenter<V>{
    /**
     * 绑定的view
     */
    private V mvpView;
    /**
     * 绑定view,一般在初始化中调用该方法
     */

    public void attachView(V mvpView) {
        this.mvpView = mvpView;
    }
    /**
     * 断开view,一般在onDestroy中调用
     */

    public void detachView() {
        this.mvpView = null;
    }
    /**
     * 是否与View建立连接
     * 每次调用业务请求的时候都要出先调用方法检查是否与View建立连接
     */
    public boolean isViewAttached(){
        return mvpView != null;
    }
    /**
     * 初始化
     * */
    protected abstract void onStart();
    /**
     * 获取连接的view
     */
    public V getView(){
        return mvpView;
    }
}

2.View接口

/**
 * view接口
 * @author DEV-81 
 * 一般包含两类方法:1.用在实现类中显示ui,2.presenter更新ui
 */

public interface LoginView {
    /**
     * 当数据请求成功后,调用此接口显示数据
     * @param data 数据源
     */
    void showResult(String data);
}

3.preseter实现类

/**
 * 同时持有model view的实例
 * @author DEV-81
 */

public class LoginPresenter extends BasePresenter<LoginView>{
    private LoginModel mLoginModel;

    public LoginPresenter() {
        mLoginModel = new LoginModel();
    }

    public void doLogin(String account , String pwd){
        mLoginModel.loginApp(account, pwd, new CallBack<String>() {
            @Override
            public void onSuccess(String data) {
                getView().showResult(data);
            }

            @Override
            public void onFailure(String msg) {
                getView().showResult(msg);
            }

            @Override
            public void onError() {

            }

            /**
             * complete
             * */
            @Override
            public void onComplete() {

            }
        });
    }

    /**
     * 初始化任务
     * */
    @Override
    protected void onStart() {

    }
}

4.model

/**
 * model
 * @author DEV-81
 */

public class LoginModel {
    /**
     * @param account
     * @param pwd
     * @param callBack 通过接口将model回调给presenter
     *
     * */
    public void loginApp(String account, String pwd, CallBack<String> callBack){
        if(TextUtils.isEmpty(account)){
            callBack.onFailure("账号为空");
           return;
        }
        if(TextUtils.isEmpty(pwd)){
            callBack.onFailure("密码为空");
            return;
        }
        if ("zhangsan".equals(account)&&"123".equals(pwd)){
            callBack.onSuccess("登录成功");
        }
    }
}

5.callback

/**
 * Callback 接口是Model层给Presenter层反馈请求信息的传递载体,
 * 所以需要在Callback中定义数据请求的各种反馈状态:
 */

public interface CallBack<T> {
 /**
  * 数据请求成功
  * @param data 请求到的数据
  */
 void onSuccess(T data);
 /**
  *  使用网络API接口请求方式时,虽然已经请求成功但是由
  *  {@code msg}的原因无法正常返回数据。
  */
 void onFailure(String msg);
 /**
  * 请求数据失败,指在请求网络API接口请求方式时,出现无法联网、
  * 缺少权限,内存泄露等原因导致无法连接到请求数据源。
  */
 void onError();
 /**
  * 当请求数据结束时,无论请求结果是成功,失败或是抛出异常都会执行此方法给用户做处理,通常做网络
  * 请求时可以在此处隐藏正在加载的等待控件
  */
 void onComplete();
}

6.activity

public class MainActivity extends AppCompatActivity  implements LoginView{

    private EditText mEdtAccount;
    private EditText mEditPwd;
    private TextView mTvLogin;
    private LoginPresenter mLoginPresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        mLoginPresenter=new LoginPresenter();
        mLoginPresenter.attachView(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mLoginPresenter.onStart();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mLoginPresenter.detachView();
    }

    private void initView() {
        mEdtAccount=findViewById(R.id.edt_account);
        mEditPwd=findViewById(R.id.edt_pwd);
        mTvLogin=findViewById(R.id.tv_login);
        mTvLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                login();
            }

            private void login() {
                String pwd = mEditPwd.getText().toString().trim();
                String account = mEdtAccount.getText().toString().trim();
                mLoginPresenter.doLogin(account,pwd);
            }
        });
    }




    @Override
    public void showResult(String data) {
        Toast.makeText(this, data, Toast.LENGTH_SHORT).show();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值