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/qq_41637459/article/details/80711194