android MVP架构学习

MVP架构是(Model-View-Presenter)模型-试图-主导器模式

传统MVC在android开发中应用比较少了,耦合度太高,不利于维护

我已一个简单的例子来介绍一下MVP模式的实际应用

假设我要做一个登陆的功能

登陆的界面需要搭建,我就不掩饰了

把与页面相关的逻辑留在activity中

其他逻辑则放入presenter中处理

我来创建两个接口,一个是activity的相关逻辑,一个是presenter的相关逻辑

public interface IMainActivity {

    public void loginSuccess();
    public void loginFailed(String msg);

}


public interface IMainActivityPresenter {

    public void login(String phone, String password);

}


我让activity和presenter类都实现对应的接口

public class MainActivity extends AppCompatActivity implements IMainActivity {

    private EditText edtPhone, edtPassword;
    private TextView txt;
    private IMainActivityPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        presenter = new MainActivityPresenter(this);
        edtPhone = (EditText) findViewById(R.id.edt_phone);
        edtPassword = (EditText) findViewById(R.id.edt_password);
        txt = (TextView) findViewById(R.id.txt);

        findViewById(R.id.btn_commit).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                login();
            }
        });
    }

    private void login() {
        String phone = edtPhone.getText().toString();
        String password = edtPassword.getText().toString();
        presenter.login(phone, password);
    }

    @Override
    public void loginSuccess() {
        txt.setText("login success");
    }

    @Override
    public void loginFailed(String msg) {
        txt.setText("login failed " + msg);
    }
}

public class MainActivityPresenter implements IMainActivityPresenter {

    private IMainActivity mainActivity;
    private Handler handler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message message) {
            int what = message.what;
            switch (what) {
                case 1: {
                    mainActivity.loginSuccess();
                }
                break;
                case 2:{
                    String errorMsg = (String) message.obj;
                    mainActivity.loginFailed(errorMsg);
                }
                break;
            }
            return true;
        }
    });

    public MainActivityPresenter(IMainActivity mainActivity) {
        this.mainActivity = mainActivity;
    }

    private boolean isLoginSuccess = false;

    @Override
    public void login(String phone, String password) {

        new Thread(new Runnable() {
            @Override
            public void run() {
                isLoginSuccess = !isLoginSuccess;
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Message msg = handler.obtainMessage();
                if (isLoginSuccess) {
                    msg.what = 1;
                    handler.sendMessage(msg);
                } else {
                    msg.what = 2;
                    msg.obj = "wrong error";
                    handler.sendMessage(msg);
                }
            }
        }).start();

    }
}

我的presenter简单模拟了一下异步处理
在activity中创建presenter对象,presenter也持有activity对象(注意此处处理不好,容易造成内存泄漏)

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.release();
        presenter = null;
    }





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LO嘉嘉VE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值