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 = "*******";
}