契约类接口
public interface ILoginContract {
public interface ILoginView {
//回显数据
public void showData(LoginBean loginBean);
}
//P层
public interface ILoginPresenter<ILoginView> {
//绑定
public void attahView(ILoginContract.ILoginView loginView);
//解绑
public void detachView(ILoginContract.ILoginView loginView);
//数据获取
public void requestData(String name, String password);
}
//M层
public interface ILoginModel {
//请求数据
public void containData(String name, String password, CallBack callBack);
//接口回调
public interface CallBack {
public void onCallBack(LoginBean repsoneData);
}
}
}
V层
public class MainActivity extends AppCompatActivity implements ILoginContract.ILoginView {
@BindView(R.id.et_name)
EditText etName;
@BindView(R.id.et_password)
EditText etPassword;
@BindView(R.id.mCheckBox)
CheckBox mCheckBox;
@BindView(R.id.btn_login)
Button btnLogin;
@BindView(R.id.btn_register)
Button btnRegister;
private LoginPresenter presenter;
private SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
presenter = new LoginPresenter();
presenter.attahView(this);
//记住密码
sp = getSharedPreferences("login",MODE_PRIVATE);
if(sp.getBoolean("c1",false)){
etName.setText(sp.getString("name",""));
etPassword.setText(sp.getString("pwd",""));
mCheckBox.setChecked(true);
}
}
@Override
public void showData(final LoginBean loginBean) {
if(loginBean.getCode().equals("0")){
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, ""+loginBean.getMsg(), Toast.LENGTH_SHORT).show();
}
});
startActivity(new Intent(MainActivity.this,ShowActivity.class));
}else{
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, ""+loginBean.getMsg(), Toast.LENGTH_SHORT).show();
}
});
}
//startActivity(new Intent(MainActivity.this,ShowActivity.class));
}
/**
* 点击事件
* @param view
*/
@OnClick({R.id.btn_login, R.id.btn_register})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_login:
String name = etName.getText().toString();
String password = etPassword.getText().toString();
presenter.requestData(name,password);
//记住密码
SharedPreferences.Editor editor = sp.edit();
editor.putString("name",name);
editor.putString("pwd",password);
editor.putBoolean("c1",mCheckBox.isChecked());
editor.commit();
break;
case R.id.btn_register:
startActivity(new Intent(MainActivity.this,RegisterActivity.class));
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
presenter.detachView(this);
}
}
P层
public class LoginPresenter implements ILoginContract.ILoginPresenter<ILoginContract.ILoginView> {
ILoginContract.ILoginView loginView;
private SoftReference<ILoginContract.ILoginView> reference;
private LoginModel model;
@Override
public void attahView(ILoginContract.ILoginView loginView) {
this.loginView = loginView;
reference = new SoftReference<>(loginView);
model = new LoginModel();
}
@Override
public void detachView(ILoginContract.ILoginView loginView) {
reference.clear();
}
@Override
public void requestData(String name, String password) {
model.containData(name,password,new ILoginContract.ILoginModel.CallBack() {
@Override
public void onCallBack(LoginBean repsoneData) {
loginView.showData(repsoneData);
}
});
}
}
M层
public class LoginModel implements ILoginContract.ILoginModel {
@Override
public void containData(String name, String password, final CallBack callBack) {
String urlString = Constant.LOGIN + "?mobile=" + name + "&password=" + password;
OkGo.<String>get(urlString).execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
String responseData = response.body().toString();
Gson gson = new Gson();
LoginBean loginBean = gson.fromJson(responseData, LoginBean.class);
callBack.onCallBack(loginBean);
}
});
}
}
拦截器
public class LogInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
//请求之前
//打印系统时间
Log.d("LogInterceptor", "System.nanoTime():" + System.nanoTime());
//打印头部信息
Headers headers = request.headers();
String type = headers.get("content-type");
String cache = headers.get("cache-control");
Log.d("LogInterceptor", type + "……" + cache);
//请求之后
Response response = chain.proceed(request);
//打印系统时间
Log.d("LogInterceptor", "System.nanoTime():" + System.nanoTime());
return response;
}
}