android MVP模式使用retroflt获取数据加载到recyclerview

来源:互联网 发布:打电话录音软件 编辑:程序博客网 时间:2024/06/05 23:04
mvp模式的概念我们都看的很多 但是具体到操作步骤发现自己无从下手 做的一个demo看看效果

mvp模式 view层定义接口方法 将数据传回来

public interface Iview {    void getUser(ArrayList<HomeBean.NewslistBean> list);}
model层定义获取接口路径 通过传值获取数据
public interface Imodel {    void getData(String url);}
创建方法实现接口 new一个集合存储数据用来presenter传给view
public class Imymodel implements Imodel{    ArrayList<HomeBean.NewslistBean> list=new ArrayList<>();    private OnFinishLisenter lisenter;    public interface OnFinishLisenter{        //得到数据        void OnFinish(ArrayList<HomeBean.NewslistBean> list);    }    public void setOnUserModel(OnFinishLisenter lisenter) {        this.lisenter = lisenter;    }    @Override    public void getData(String url) {
//使用retroflt获取网络数据
        Retrofit retrofit=new Retrofit.Builder().baseUrl(url).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();        ApiService apiservice=retrofit.create(ApiService.class);        Observable<HomeBean> homes=apiservice.gettiyu();        homes.subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer<HomeBean>() {                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onNext(HomeBean homeBean) {                    list= (ArrayList<HomeBean.NewslistBean>) homeBean.getNewslist();                    lisenter.OnFinish(list);                    }                });    }}
presenter来连接view和model
public class ImyPresenter implements Imymodel.OnFinishLisenter {    private final Iview userview;    private final Imymodel usermodel;    public ImyPresenter(Iview userview) {        this.userview = userview;        this.usermodel=new Imymodel();        usermodel.setOnUserModel(this);    }    public void getUrl(String url) {        //得到Model中请求数据的方法        usermodel.getData(url);    }    @Override    public void OnFinish(ArrayList<HomeBean.NewslistBean> list) {        userview.getUser(list);    }}
在fragment或者activity中实现view的接口同时实现他的方法
public void getUser(ArrayList<HomeBean.NewslistBean> slist) {    mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));    mRecyclerView.setAdapter(new HomeAdapter(getActivity(), slist));}
获取到了model传来的数据 给控件recyclerview赋值 设置适配器 因为是recyclerview需要添加布局管理器
阅读全文
0 0
原创粉丝点击