简单的MVP写法(二)

前面已经写了简单的MVP写法(一),现在介绍另外一种MVP的写法。
这种写法分为三层
Model :

public abstract class BaseModel {

}

View :

public interface BaseView{

    void onError(String e);

    void setPresenter();

    Activity getCurrentActivity();

}

Presenter :

public interface BasePresenter  {

    Context getContext();

    void provideErrorMessage(String msg);
}

当然了base中的方法完全可以由自己的业务需求来决定。

接下来举个例子:

Model的实现:

public class ExampleModel extends BaseModel {

    private Context mContext;
    private ExamplePresenter mPresenter;

    public ExampleModel(ExamplePresenter mPresenter) {
        this.mPresenter = mPresenter;
        mContext = mPresenter.getContext();
    }

    public void getExampleDataFromServer(String name,String longitude,String latitude,String sex){
        AppNetLoader.getInstance().async(AppNetLoader.getInstance().getService().getNearbyPersonList(name, longitude, latitude, sex),
                new BaseObserver<List<NearbyPerson>>() {
                    @Override
                    protected void setNeedContext() {
                        setContext(mContext);
                    }

                    @Override
                    protected void _onNext(List<NearbyPerson> list) {
                        mPresenter.provideExampleData(list);
                    }

                    @Override
                    protected void _onError(Throwable e) {
                        mPresenter.provideErrorMessage(e.toString());
                    }
                });
    }
}

ExampleModel负责向服务器发起网络请求,请求到数据之后,在回调方法中,由构造函数中传进来的Presenter负责传递数据。
再来看一下Presenter的接口和实现

public interface ExamplePresenter extends BasePresenter{

    void getExampleData(String name,String longitude,String latitude,String sex);

    void provideExampleData(List<NearbyPerson> list);
}

接口有两个方法,一个方法负责请求数据,一个方法负责传递数据给view层
下面来看具体实现:

public class ExamplePresenterImpl implements ExamplePresenter {

    private ExampleModel mExampleModel;
    private ExampleView mExampleView;

    public ExamplePresenterImpl(ExampleView mExampleView) {
        this.mExampleView = mExampleView;
        mExampleModel = new ExampleModel(this);
    }

    @Override
    public Context getContext() {
        return mExampleView.getCurrentActivity();
    }

    @Override
    public void provideErrorMessage(String msg) {
        mExampleView.onError(msg);
    }

    @Override
    public void getExampleData(String name,String longitude,String latitude,String sex) {
        //发起请求,实际上是让model去做
        mExampleModel.getExampleDataFromServer(name,longitude,latitude,sex);
    }

    @Override
    public void provideExampleData(List<NearbyPerson> list) {
        //拿到数据之后,将数据给view
        mExampleView.showExampleData(list);
    }
}

在需要数据地方,实现view层接口:

View接口:

public interface ExampleView extends BaseView{

    void showExampleData(List<NearbyPerson> data);

}

具体实现:

public class MainActivity extends AppCompatActivity implements ExampleView

复写方法:

 @Override
    public void showExampleData(List<NearbyPerson> data) {
        mShow.setText(data.toString());
    }

最后还少的是一个开始,需要由presenter发起网络请求:
先初始化presenter:

mExamplePresenter = new ExamplePresenterImpl(this);

在需要发起请求的地方:

 mExamplePresenter.getExampleData("","","","");

最后完整的项目:
https://github.com/ckwcc/AnotherMVP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值