Android MVP框架搭建

对于MVP的定义都已经非常熟悉了,真正的困难在于如何将三者之间关联起来.

关键字:接口,回调


MVP的流程无非就是M负责加载数据,V更新视图,而P作为中间媒介负责沟通M和V,那么P如何实现两者的联通呢?

P与M之间:通过接口回调联通,M加载数据后,在回调接口中将数据返回给P

P与V之间:P持有V的引用,当M将数据返回后,可以调用V中的方法更新UI


View层

public interface MvpView {

    /**
     * 显示加载进度
     */
    void showLoading();


    /**
     * 隐藏进度
     */
    void hidddLoading();

    /**
     * 显示成功的数据
     */
    void showData(String data);

    /**
     * 显示失败的信息
     */

    void showFaileMessage(String data);

    /**
     * 链接错误
     */
    void showErrorMessage(String data);
}


Model层

/**
 * 模拟网络请求的类
 */
public class MvpModel {

    public static void getNetData(final String param, final MvpCallback callback){
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                switch (param){
                    case "normal":
                        callback.onSucess("请求成功!!!");
                        break;
                    case "failure":
                        callback.onFail("请求数据失败!!!");
                        break;
                    case "error":
                        callback.onError("链接错误");
                        break;

                }
                callback.onCoplemet();
            }
        },2000);
    }
}

Presenter代码

public class MvpPresenter {

    /**
     * 持有View的引用
     */

    private MvpView mvpView;

    public MvpPresenter(MvpView mvpView){
        this.mvpView = mvpView;
    }


    public void getData(String param){

        //显示进度条
        mvpView.showLoading();

        //获取网络数据
        MvpModel.getNetData(param, new MvpCallback() {
            @Override
            public void onSucess(String mData) {
                    mvpView.showData(mData);

            }

            @Override
            public void onFail(String mData) {
                    mvpView.showFaileMessage(mData);

            }

            @Override
            public void onError(String mData) {
                    mvpView.showErrorMessage(mData);

            }

            @Override
            public void onCoplemet() {
                    mvpView.hidddLoading();
            }
        });

    }

}

Callback接口

public interface MvpCallback {

    /**
     * 请求数据成功
     */
    void onSucess(String mData);


    /**
     * 请求数据失败
     */

    void onFail(String mData);


    /**
     * 请求数据错误
     */

    void onError(String mData);


    /**
     * 加载完毕
     */
    void onCoplemet();

}


Activity代码

public class MainActivity extends AppCompatActivity implements MvpView{

    private ProgressDialog progressDialog;
    private TextView txt;
    MvpPresenter mvpPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mvpPresenter = new MvpPresenter(this);

        progressDialog = new ProgressDialog(this);
        progressDialog.setCancelable(false);
        progressDialog.setMessage("正在加载...");

        txt = (TextView) findViewById(R.id.txt);

    }



    public void getDataSucess(View v){
        mvpPresenter.getData("normal");
    }

    public void getDataFail(View v){
        mvpPresenter.getData("failure");
    }


    public void getDataError(View v){
        mvpPresenter.getData("error");
    }




    @Override
    public void showLoading() {
        if (!progressDialog.isShowing()){
            progressDialog.show();
        }
    }

    @Override
    public void hidddLoading() {
        if (progressDialog.isShowing()){
            progressDialog.dismiss();
        }
    }

    @Override
    public void showData(String data) {
        txt.setText(data);
    }

    @Override
    public void showFaileMessage(String data) {
        txt.setText(data);
    }

    @Override
    public void showErrorMessage(String data) {
        txt.setText(data);
    }
    
}













评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值