Mvp实现登录功能

实现步骤:

1.   在MVp包下的  Model包下  创建 LoginModel 类     Model主要用于联网请求数据

2.  在MVp包下的 View包下 创建MyLoginView 类

3.   在MVP包下的Presenter包下 创建 LoginPresenter 类

4.   在在MVp包下的 View包下创建activity包,然后在包下创建 LoginActivity(里面包含友盟登录)

5.  创建包名为Base,下面一共有三个类,分别是BaseActivity,BasePresenter,IView


1.   在MVp包下的  Model包下  创建 LoginModel 类     Model主要用于联网请求数据

public class LoginModel {


    //进行联网请求
       public void getDataNet(String mobile,String password,final onCallBackListener onCallBackListener){
           String url=HttpConfig.URL_LOGIN;
           Map<String,String> map=new HashMap<>();
           map.put("mobile",mobile);
           map.put("password",password);

           OkhttpUtils.getInstance().doPost(url, map, new OkhttpUtils.onCallBack() {
               @Override
               public void onFaild(Exception e) {

               }

               @Override
               public void onResponse(String json) {
                   Gson gson = new Gson();
                   LoginBean loginBean = gson.fromJson(json, LoginBean.class);
                   String msg = loginBean.getMsg();
                   String code = loginBean.getCode();

                   if("0".equalsIgnoreCase(code)){
                       if(onCallBackListener!=null){
                           onCallBackListener.onSuccess(loginBean);
                       }
                   }else{
                       if(onCallBackListener!=null){
                           onCallBackListener.onFaild(msg);
                       }
                   }
               }
           });
       }

       //定义接口
     public interface onCallBackListener{

           void onSuccess(LoginBean loginBean);
           void onFaild(String error);
       }

}

2.  在MVp包下的 View包下 创建LoginView 类

public interface LoginView extends IView {

    void onSuccess(LoginBean loginBean);
    void onFaild(String error);

}

3.   在MVP包下的Presenter包下 创建 LoginPresenter 类

public class LoginPresenter extends BasePresenter<LoginView> {

private LoginModel loginModel;

    public LoginPresenter(LoginView view) {
        super(view);

    }

    @Override
    protected void initModel() {

      loginModel=new LoginModel();

    }

    public void login(String mobile,String password){
        loginModel.getDataNet(mobile, password, new LoginModel.onCallBackListener() {
            @Override
            public void onSuccess(LoginBean loginBean) {

                if(view!=null){
                    view.onSuccess(loginBean);
                }
            }
            @Override
            public void onFaild(String error) {
                 if(view!=null){
                     view.onFaild(error);
                 }
            }
        });
    }


}

4.   在在MVp包下的 View包下创建activity包,然后在包下创建 LoginActivity

public class LoginActivity extends BaseActivity<LoginPresenter> implements View.OnClickListener,LoginView{

    private EditText ed_mobile,password;
    private Button login,reg;


    @Override
    protected void initData() {

    }

    @Override
    protected LoginPresenter provides() {
        return new LoginPresenter((LoginView) this);
    }

    @Override
    protected void initListener() {
          login.setOnClickListener(this);

          login.setOnLongClickListener(new View.OnLongClickListener() {
              @Override
              public boolean onLongClick(View v) {

                  UMShareAPI mShareAPI= UMShareAPI.get(LoginActivity.this);

                  mShareAPI.getPlatformInfo(LoginActivity.this, SHARE_MEDIA.QQ, authListener);
                  return false;
              }
          });
    }

    @Override
    protected void initView() {
        ed_mobile = findViewById(R.id.main_mobile);
        password=findViewById(R.id.main_password);
        login = findViewById(R.id.main_login);
        reg=findViewById(R.id.main_reg);
    }

    @Override
    protected int provideId() {
        return R.layout.activity_main;
    }

//实现点击事件
    @Override
    public void onClick(View v) {
       //获取输入框内容
        String m = ed_mobile.getText().toString();
        String p = password.getText().toString();
        presenter.login(m,p);
    }

//登录成功
    @Override
    public void onSuccess(LoginBean loginBean) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(LoginActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
            }
        });
    }
//登录失败
    @Override
    public void onFaild(final String error) {
       runOnUiThread(new Runnable() {
       @Override
    public void run() {
        Toast.makeText(LoginActivity.this,"登录失败"+error,Toast.LENGTH_SHORT).show();
      }
       });
    }


    public void getReg(View v){
        Intent it = new Intent(LoginActivity.this, RegActivity.class);
        startActivity(it);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
    }

    UMAuthListener authListener = new UMAuthListener() {
        /**
         * @desc 授权开始的回调
         * @param platform 平台名称
         */
        @Override
        public void onStart(SHARE_MEDIA platform) {

        }

        /**
         * @desc 授权成功的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         * @param data 用户资料返回
         */
        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {

            Toast.makeText(LoginActivity.this, "成功了", Toast.LENGTH_LONG).show();

        }

        /**
         * @desc 授权失败的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         * @param t 错误原因
         */
        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {

            Toast.makeText(LoginActivity.this, "失败:" + t.getMessage(),
                    Toast.LENGTH_LONG).show();
        }

        /**
         * @desc 授权取消的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         */
        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText(LoginActivity.this, "取消了", Toast.LENGTH_LONG).show();
        }
    };


}

5.  创建包名为Base,下面一共有三个类,分别是BaseActivity,BasePresenter,IView

    //首先是IView(此类是一个接口)

public interface IView {



}

//其次是 BasePresenter (需要继承IView)
public abstract class BasePresenter <V extends IView>{

  protected V view;

    public BasePresenter(V view) {
        this.view = view;
        initModel();
    }


    protected abstract  void initModel();

//解决内存泄漏
    void onDestory(){
        view=null;
    }

}

//最后是BaseActivity

public abstract class BaseActivity <P extends BasePresenter> extends AppCompatActivity{


    protected  P presenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(provideId());
        initView();
        initListener();
        //提供presenter
        presenter=provides();
        initData();
    }

    protected abstract void initData();

    protected abstract P provides();

    protected abstract void initListener();

    protected abstract void initView();

    protected abstract int provideId();

    //解决内存泄漏

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.onDestory();
    }
}



猜你喜欢

转载自blog.csdn.net/chenyibai/article/details/80709677