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



MVP(Model-View-Presenter)是一种软件架构模式,它将软件应用程序分为三个基本部分:模型(Model)、视图(View)和表示器(Presenter)。MVP模式的主要目的是实现UI和业务逻辑之间的分离,使得代码更加可维护和可扩展。 下面是一个简单的MVP模式实现的Android登录功能: 1. 创建一个LoginActivity类作为View层,它将负责展示登录页面,处理用户的输入和显示登录结果。 ``` public class LoginActivity extends AppCompatActivity implements LoginContract.View { private EditText mUserNameEditText; private EditText mPasswordEditText; private Button mLoginButton; private TextView mResultTextView; private LoginContract.Presenter mPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); mUserNameEditText = findViewById(R.id.user_name_edit_text); mPasswordEditText = findViewById(R.id.password_edit_text); mLoginButton = findViewById(R.id.login_button); mResultTextView = findViewById(R.id.result_text_view); mPresenter = new LoginPresenter(this); mLoginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String userName = mUserNameEditText.getText().toString(); String password = mPasswordEditText.getText().toString(); mPresenter.login(userName, password); } }); } @Override public void showResult(String result) { mResultTextView.setText(result); } } ``` 2. 创建一个LoginPresenter类作为Presenter层,它将负责处理业务逻辑,调用Model层进行数据处理,并将结果返回给View层。 ``` public class LoginPresenter implements LoginContract.Presenter { private LoginContract.View mView; private LoginModel mModel; public LoginPresenter(LoginContract.View view) { mView = view; mModel = new LoginModel(); } @Override public void login(String userName, String password) { boolean result = mModel.checkUser(userName, password); if (result) { mView.showResult("登录成功"); } else { mView.showResult("登录失败"); } } } ``` 3. 创建一个LoginModel类作为Model层,它将负责进行数据处理,例如检查用户名和密码是否匹配。 ``` public class LoginModel { public boolean checkUser(String userName, String password) { // 进行用户名和密码的匹配,这里假设用户名为admin,密码为123456 return userName.equals("admin") && password.equals("123456"); } } ``` 4. 创建一个LoginContract接口,它定义了View层和Presenter层的接口方法。 ``` public interface LoginContract { interface View { void showResult(String result); } interface Presenter { void login(String userName, String password); } } ``` 通过以上步骤,我们就完成了一个简单的MVP模式实现的Android登录功能。在这个例子中,View层处理UI展示和用户输入,Presenter层处理业务逻辑,并调用Model层进行数据处理和返回结果,Model层仅处理数据。这种分层架构可以使代码更加清晰、易于维护和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值