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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的Android MVP架构模式实现登录功能的示例代码: 1. 首先定义一个登录的接口 LoginContract,其中包括视图层、控制层和数据层的接口: ``` public interface LoginContract { interface View { void onLoginSuccess(); void onLoginFailure(String errorMessage); } interface Presenter { void login(String username, String password); } interface Model { void login(String username, String password, OnLoginFinishedListener listener); } interface OnLoginFinishedListener { void onLoginSuccess(); void onLoginFailure(String errorMessage); } } ``` 2. 在视图层,实现LoginContract.View接口,并创建Presenter对象: ``` public class LoginActivity extends AppCompatActivity implements LoginContract.View { private EditText mUsernameEditText; private EditText mPasswordEditText; private Button mLoginButton; private ProgressBar mProgressBar; private LoginContract.Presenter mPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); mUsernameEditText = findViewById(R.id.username_edit_text); mPasswordEditText = findViewById(R.id.password_edit_text); mLoginButton = findViewById(R.id.login_button); mProgressBar = findViewById(R.id.progress_bar); mPresenter = new LoginPresenter(this); mLoginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String username = mUsernameEditText.getText().toString(); String password = mPasswordEditText.getText().toString(); mPresenter.login(username, password); } }); } @Override public void onLoginSuccess() { // 登录成功 mProgressBar.setVisibility(View.GONE); Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(this, MainActivity.class); startActivity(intent); finish(); } @Override public void onLoginFailure(String errorMessage) { // 登录失败 mProgressBar.setVisibility(View.GONE); Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT).show(); } } ``` 3. 在控制层,实现LoginContract.Presenter接口,并通过构造函数将视图层和数据层传递进来: ``` public class LoginPresenter implements LoginContract.Presenter, LoginContract.OnLoginFinishedListener { private LoginContract.View mView; private LoginContract.Model mModel; public LoginPresenter(LoginContract.View view) { mView = view; mModel = new LoginModel(); } @Override public void login(String username, String password) { mView.showProgressBar(); mModel.login(username, password, this); } @Override public void onLoginSuccess() { mView.hideProgressBar(); mView.onLoginSuccess(); } @Override public void onLoginFailure(String errorMessage) { mView.hideProgressBar(); mView.onLoginFailure(errorMessage); } } ``` 4. 在数据层,实现LoginContract.Model接口,并在登录完成后将结果回调给Presenter: ``` public class LoginModel implements LoginContract.Model { @Override public void login(final String username, final String password, final LoginContract.OnLoginFinishedListener listener) { // 模拟登录过程,这里使用Handler模拟异步请求 new Handler().postDelayed(new Runnable() { @Override public void run() { if (username.equals("admin") && password.equals("123456")) { listener.onLoginSuccess(); } else { listener.onLoginFailure("用户名或密码错误"); } } }, 2000); } } ``` 这就是一个简单的Android MVP架构模式实现登录功能的示例代码,通过这种架构模式,可以将代码分层,实现逻辑清晰,易于维护和测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值