AndroidMVP模式小Demo(登录功能实现)

MVP模式:

   

   1,view 层 负责显示,里面会初始化Presenter

2,Model层提供数据,常常有javabean类,并且不止一个接口

3.Presenter :从Model层拿到数据,初始化view层接口,更改视图


下面直接上代码:

Activity:

// Activity 实现implements LoadingContract.View,用来显示视图
public class MainActivity extends AppCompatActivity implements LoadingContract.View {

    private EditText mEtNum;
    private EditText mEtPassword;
    private Button mLoding;
    private LoadingContract.Presenter mPresenter;
    private ProgressDialog mProgressDialog;
    private String mNum;
    private String mPassword;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 这里很关键,否则具体实现逻辑层Presenter会报空
        // 这里接的是this,LoadingPresenter的构造参数是LoadingContract.View,
        // 因为本类MainActivity实现了LoadingContract.View,故可以传this
        new LoadingPresenter(this);
        initView();

    }

    @Override
    protected void onResume() {
        super.onResume();
        // 公共的方法写在BasePresenter里面
        mPresenter.start();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mPresenter.stop();
    }

    private void initView() {
        mEtNum = (EditText) findViewById(R.id.number);
        mEtPassword = (EditText) findViewById(R.id.password);
        mLoding = (Button) findViewById(R.id.btn);
        mProgressDialog = new ProgressDialog(this);

    }

    public void click(View view){
        final String url = "http://www.baidu.com";
        mNum = mEtNum.getText()
                     .toString();
        mPassword = mEtPassword.getText()
                               .toString();
        mPresenter.submit(this,url,mNum,mPassword);
    }


    @Override
    public void showErro(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT)
             .show();
    }

    @Override
    public void showLoading() {
        mProgressDialog.show();
    }

    @Override
    public void showSucceed() {
        Toast.makeText(this, "登录成功!", Toast.LENGTH_SHORT)
             .show();
    }

    @Override
    public void dismissLoading() {
        mProgressDialog.dismiss();
    }

    @Override
    public void setPresenter(LoadingContract.Presenter presenter) {
        this.mPresenter = presenter;
    }
}


Contract:

public class LoadingContract {
    // BasePresenter也是自定义,里面有2个未实现方法
    interface Presenter extends BasePresenter{
        // 继承BasePresenter,是出于Presenter当中可能会有N多的未实现方法,这样
        // 就可以将一些公共的方法写在BasePresenter里面
        void submit(Context context,String url,String num,String password);
    }

    interface View extends BaseView<LoadingContract.Presenter>{
        void showErro(String msg);
        void showLoading();
        void showSucceed();
        void dismissLoading();
    }

}


Presenter:

public class LoadingPresenter implements LoadingContract.Presenter {

    private LoadingContract.View mView;

    public LoadingPresenter(LoadingContract.View view) {
    // 构造函数,用来初始化
        this.mView = view;
        view.setPresenter(this);
    }

    @Override
    public void submit(final Context context, String url, final String num, final String password) {
        mView.showLoading();

        // 延时3,模拟登录操作
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mView.dismissLoading();
                if (num.equals("123")  && password.equals("123") ){
                    mView.showSucceed();

                    context.startActivity(new Intent(context, SecondActivity.class));
                }else {
                    mView.showErro("帐号或者密码错误");
                }
            }
        }, 3000);

    }

    @Override
    public void start() {
        Log.d("ztf", " start====> " );
    }

    @Override
    public void stop() {
        Log.d("ztf", " stop====> " );
    }
}


BasePresenter 
public interface BasePresenter {
    void start();

    void stop();

}


public interface BaseView<T> {

    void setPresenter(T presenter);

}

源码下载.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值