MVP框架简单搭建--契约类及优化

Activity页面

public class LoginActivity extends AppCompatActivity implements ILoginContract.ILoginView {

    @BindView(R.id.et_userName)
    EditText etUserName;
    @BindView(R.id.et_password)
    EditText etPassword;
    @BindView(R.id.btn_login)
    Button btnLogin;
    private ILoginContract.ILoginPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        //创建P层
        presenter = new LoginPresenterImpl();
        presenter.attachView(this);
    }

    @Override
    public void showData() {

    }

    @OnClick(R.id.btn_login)
    public void onViewClicked() {
        //获取用户名、密码
        String userName = etUserName.getText().toString();
        String password = etPassword.getText().toString();
        //获取P层,触发请求动作
        presenter.requstLoginData(userName,password);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //解绑
        presenter.detachView(this);
    }
}

契约类

ublic interface ILoginContract {
    //V层接口
    public interface ILoginView {
        //数据显示
        public void showData();
    }

    //P层接口
    public interface ILoginPresenter<ILoginView> {
        //绑定
        public void attachView(ILoginView loginView);

        //解绑
        public void detachView(ILoginView loginView);

        //数据请求,请求M层数据,做登录处理
        public void requstLoginData(String userName, String password);

    }

    //M层接口
    public interface ILoginModel {
        //做登录的接口的请求
        public void containLoginResponseData(String userName, String password, CallBack callback);

        //接口回调
        public interface CallBack {
            //回显数据方法
            public void responseData();
        }
    }

}

P层

public class LoginPresenterImpl implements ILoginContract.ILoginPresenter<ILoginContract.ILoginView> {
    ILoginContract.ILoginView loginView;
    private SoftReference<ILoginContract.ILoginView> reference;
    private ILoginContract.ILoginModel model;

    @Override
    public void attachView(ILoginContract.ILoginView loginView) {
        this.loginView = loginView;
        //软引用包裹
        reference = new SoftReference<>(loginView);
        //TODO 耦合性处理
        //M层
        model = new LoginModelImpl();
    }

    @Override
    public void detachView(ILoginContract.ILoginView loginView) {
        reference.clear();
    }

    @Override
    public void requstLoginData(String userName, String password) {
        model.containLoginResponseData(userName,password,new ILoginContract.ILoginModel.CallBack() {
            @Override
            public void responseData() {

            }
        });
    }
}

M层

public class LoginModelImpl implements ILoginContract.ILoginModel {

    @Override
    public void containLoginResponseData(final String userName, final String password, CallBack callback) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                requestLoginData(userName, password);
            }
        };
        new Thread(runnable).start();

    }

    private void requestLoginData(String userName, String password) {
        try {
            //携带用户名、密码的参数的URL
            //String request_url = Constant.LOGIN_URL + "?phone=" + userName + "&pwd=" + password;
            String request_url = Constant.BEAUTY_URL;
            //OKHttp做登录处理
            //创建OKHttpClient对象
            OkHttpClient client = new OkHttpClient.Builder().build();
            //表单请求体
            //FormBody formBody = new FormBody.Builder().build();
            //创建Requst请求对象
            //Request request = new Request.Builder().method("POST",formBody).url(request_url).build();
            Request request = new Request.Builder().url(request_url).build();
            //通过OKHttpClient对象调用newCall方法
            Response response = client.newCall(request).execute();
            //获取到Response,进行处理
            String responseData = response.body().string();
            //回显到P层
            Log.d("LoginModelImpl", responseData);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Constant数据

public class Constant {
    //登录的URL
    public static final String LOGIN_URL = "*******";

    //福利的URL
    public static final String BEAUTY_URL = "*******";

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值