package com.dl7.mvp.module.news.newslist; import com.dl7.mvp.adapter.item.NewsMultiItem; import com.dl7.mvp.api.NewsUtils; import com.dl7.mvp.api.RetrofitService; import com.dl7.mvp.api.bean.NewsInfo; import com.dl7.mvp.module.base.IBasePresenter; import com.dl7.mvp.utils.ToastUtils; import com.orhanobut.logger.Logger; import java.util.List; import rx.Observable; import rx.Subscriber; import rx.functions.Action0; import rx.functions.Func1; /** * Created by long on 2016/8/23. * 新闻列表 Presenter */ public class NewsListPresenter implements IBasePresenter { private INewsListView mView; private String mNewsId; private int mPage = 0; public NewsListPresenter(INewsListView view, String newsId) { this.mView = view; this.mNewsId = newsId; } @Override public void getData(final boolean isRefresh) { RetrofitService.getNewsList(mNewsId, mPage) .doOnSubscribe(new Action0() { @Override public void call() { if (!isRefresh) { mView.showLoading(); } } }) .filter(new Func1<NewsInfo, Boolean>() { @Override public Boolean call(NewsInfo newsBean) { if (NewsUtils.isAbNews(newsBean)) { mView.loadAdData(newsBean); } return !NewsUtils.isAbNews(newsBean); } }) .compose(mTransformer) .subscribe(new Subscriber<List<NewsMultiItem>>() { @Override public void onCompleted() { Logger.w("onCompleted " + isRefresh); if (isRefresh) { mView.finishRefresh(); } else { mView.hideLoading(); } } @Override public void onError(Throwable e) { Logger.e(e.toString() + " " + isRefresh); if (isRefresh) { mView.finishRefresh(); // 可以提示对应的信息,但不更新界面 ToastUtils.showToast("刷新失败提示什么根据实际情况"); } else { mView.showNetError(); } } @Override public void onNext(List<NewsMultiItem> newsMultiItems) { mView.loadData(newsMultiItems); mPage++; } }); } @Override public void getMoreData() { RetrofitService.getNewsList(mNewsId, mPage) .compose(mTransformer) .subscribe(new Subscriber<List<NewsMultiItem>>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Logger.e(e.toString()); mView.loadNoData(); } @Override public void onNext(List<NewsMultiItem> newsList) { mView.loadMoreData(newsList); mPage++; } }); } /** * 统一变换 */ private Observable.Transformer<NewsInfo, List<NewsMultiItem>> mTransformer = new Observable.Transformer<NewsInfo, List<NewsMultiItem>>() { @Override public Observable<List<NewsMultiItem>> call(Observable<NewsInfo> newsInfoObservable) { return newsInfoObservable .map(new Func1<NewsInfo, NewsMultiItem>() { @Override public NewsMultiItem call(NewsInfo newsBean) { if (NewsUtils.isNewsPhotoSet(newsBean.getSkipType())) { return new NewsMultiItem(NewsMultiItem.ITEM_TYPE_PHOTO_SET, newsBean); } return new NewsMultiItem(NewsMultiItem.ITEM_TYPE_NORMAL, newsBean); } }) .toList() .compose(mView.<List<NewsMultiItem>>bindToLife()); } }; }