MVP框架登录列表

契约类接口

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;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43731179/article/details/85554392