MVP搭建

为什么用MVP架构

其实我们日常开发中的Activity,Fragment和XML界面就相当于是一个 MVC 的架构模式,Activity中不仅要处理各种 UI 操作还要请求数据以及解析。

这种开发方式的缺点就是业务量大的时候一个Activity 文件分分钟飙到上千行代码,想要改一处业务逻辑光是去找就要费半天劲,而且有点地方逻辑处理是一样的无奈是不同的 Activity 就没办法很好的写成通用方法。

那 MVP 为啥好用呢?

MVP 模式将Activity 中的业务逻辑全部分离出来,让Activity 只做 UI 逻辑的处理,所有跟Android API无关的业务逻辑由 Presenter 层来完成。

将业务处理分离出来后最明显的好处就是管理方便,但是缺点就是增加了代码量。
在这里插入图片描述下面我做的就是使用MVP搭建好之后做一个网络请求数据的操作

  1. 抽取BaseActivity类继承AppCompatActivity并写抽象方法
  2. 创建接口MyCallBack写调取状态
  3. M层(Model接口写调用方法并设置参数)
  4. ModelImpl连接接口Model实现网络请求并把数据传给MyCallBack
  5. IView接口写启动状态的方法
  6. IPresenter接口调用拿到数据启动的方法
  7. IPresenterImpl连接接口IPresenter并传入数据
  8. MainActivity实现接口和里边的方法做相应操作
    1.抽取BaseActivity类继承AppCompatActivity并写抽象方法
public abstract class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        init();
    }

    protected abstract int getLayout();
    protected abstract void initViews();
    protected abstract void setOnClicks();

    void init(){
        if(getLayout() != 0){
            setContentView(getLayout());
            initViews();
            setOnClicks();
        }
    };

2. 创建接口MyCallBack写调取状态

public interface MyCallBack<T> {
    void getDataSuccess(T success);
    void getDataError(T error);
}

3. M层(Model接口写调用方法并设置参数)

public interface Model {
    void Post(String httpurl , int index , MyCallBack myCallBack);
}

4. ModelImpl连接接口Model实现网络请求并把数据传给MyCallBack

public interface Model {
    void Post(String httpurl , int index , MyCallBack myCallBack);
}

5. IView接口写启动状态的方法

public interface IView<T> {
    void startDataSuccess(T success);
    void startDataError(T error);
}

6. IPresenter接口调用拿到数据启动的方法

public interface IPresenter {
    void startData(String httpUrl,int index);
}

7. IPresenterImpl连接接口IPresenter并传入数据

public class IPresenterImpl implements IPresenter {
    private IView iView;
    private ModelImpl model;

    public IPresenterImpl(IView iView) {
        this.iView = iView;
        model = new ModelImpl();
    }


    @Override
    public void startData(final String httpUrl, int index) {
        model.Post(httpUrl, index, new MyCallBack() {
            @Override
            public void getDataSuccess(Object success) {
                iView.startDataSuccess(success);
            }

            @Override
            public void getDataError(Object error) {
                iView.startDataError(error);
            }
        });
    }
}

8.MainActivity实现接口和里边的方法做相应操作
public class MainActivity extends BaseActivity implements IView ,XListView.IXListViewListener{

private final String successUrl = "http://www.xieast.com/api/news/news.php?page=";
private int index = 1;
private XListView xListView;
private MyAdapter baseAdapter;
private IPresenterImpl iPresenter;
private List<ListBean.DataBean> listAll = new ArrayList<>();

@Override
protected int getLayout() {
    return R.layout.activity_main;
}

@Override
protected void initViews() {
    iPresenter = new IPresenterImpl(this);
    xListView = findViewById(R.id.xlistView);
    baseAdapter = new MyAdapter(MainActivity.this);
    xListView.setAdapter(baseAdapter);
    xListView.setPullLoadEnable(true);
    xListView.setXListViewListener(this);
    iPresenter.startData(successUrl,index);
}

@Override
protected void setOnClicks() {

}

@Override
public void startDataSuccess(Object success) {

    ListBean bean = (ListBean) success;
    List<ListBean.DataBean> list = bean.getData();
    listAll.addAll(list);
    baseAdapter.setList(listAll);
    xListView.stopRefresh();//停止刷新
    xListView.stopLoadMore();//停止加载更多
}

@Override
public void startDataError(Object error) {

}

@Override
public void onRefresh() {
    index=1;
    listAll.clear();
    iPresenter.startData(successUrl,1);
}

@Override
public void onLoadMore() {
    index++;
    iPresenter.startData(successUrl,index);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值