Retrofit+mvp简单实例

1 篇文章 0 订阅

v:就一个简单的接口,给activity提供数据,activity实现这个接口就可以
所以数据回调都可以用这一个接口

public interface ViewData<T> {
    void showProgress();
    void hideProgress();
    void loadData(T data);
}

m : 数据真正来源,提供数据给p
p需要传递接口过来拿数据,在m的构造方法中将接口传递过来
每个接口都需要一个m,因为传递参数不一样,数据回调不一样

public class ModelMovie {
    PresenterListener<MovieResponse<List<Movie>>> listener;
    public ModelMovie(PresenterListener<MovieResponse<List<Movie>>> listener){
        this.listener = listener;
    }
    public void getMovies(int start, int end) {
        ApiManager.getMovies(start, end).enqueue(new Callback<MovieResponse<List<Movie>>>() {
            @Override
            public void onResponse(Call<MovieResponse<List<Movie>>> call, Response<MovieResponse<List<Movie>>> response) {
                listener.onSuccess(response.body());
            }

            @Override
            public void onFailure(Call<MovieResponse<List<Movie>>> call, Throwable t) {
                listener.onFialer(t);
            }
        });
    }
}

p:从m层拿数据,传递数据给v
p要从m层拿数据,所以p需要传递接口给m
v要传递p一个接口
p是直接和activity交互的,所以p层封装m层调用数据的方法,通过调用p层获取数据的方法来触发m层
在p的构造方法中传入v的接口,new m获取m实例,调用它的获取数据的方法
每个接口都要一个p

public class PresenterMovie implements PresenterListener<MovieResponse<List<Movie>>>{
    private final ModelMovie modelMovie;
    ViewData<MovieResponse<List<Movie>>> viewData;

    public PresenterMovie(ViewData<MovieResponse<List<Movie>>> viewData){
        modelMovie = new ModelMovie(this);
        this.viewData = viewData;

    }
    public void getMovies(int start,int end){
        viewData.showProgress();
        modelMovie.getMovies(start,end);
    }
    @Override
    public void onSuccess(MovieResponse<List<Movie>> response) {
        viewData.hideProgress();
        viewData.loadData(response);
    }

    @Override
    public void onFialer(Throwable e) {
        viewData.hideProgress();
    }
}

activity:
实现v接口获取数据
只需new p就可以获取数据

public class Activity extends ListActivity implements ViewData<MovieResponse<List<Movie>>> {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PresenterMovie presenterMovie = new PresenterMovie(this);
        presenterMovie.getMovies(0,10);

    }

    @Override
    public void showProgress() {
        Toast.makeText(this,"showProgress",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void hideProgress() {
        Toast.makeText(this,"hideProgress",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void loadData(MovieResponse<List<Movie>> data) {
        List<String> titles = new ArrayList<>();
        for (Movie m: data.getSubjects()){
            titles.add(m.getTitle());
        }


        ArrayAdapter aa = new ArrayAdapter(this, R.layout.main,titles);
        setListAdapter(aa);
    }
}

下载链接,mvp1包下是该文章代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值