public class ZhihuPresenterImpl extends BasePresenterImpl implements IZhihuPresenter {
// presenter持有view的引用
private IZhihuFragment mZhihuFragment;
private CacheUtil mCacheUtil;
private Gson gson = new Gson();
public ZhihuPresenterImpl(Context context,IZhihuFragment zhihuFragment) {
mZhihuFragment = zhihuFragment;
mCacheUtil = CacheUtil.get(context);
}
@Override
public void getLastZhihuNews() {
mZhihuFragment.showProgressDialog();
Subscription subscription = ApiManage.getInstance().getZhihuApiService().getLastDaily()
.map(new Func1<ZhihuDaily, ZhihuDaily>() { //添加了观察者,当这些观察者发现数据状态有变时,就会使用View的接口来更新UI
@Override
public ZhihuDaily call(ZhihuDaily zhihuDaily) {
String date = zhihuDaily.getDate();
for (ZhihuDailyItem zhihuDailyItem : zhihuDaily.getStories()) {
zhihuDailyItem.setDate(date);
}
return zhihuDaily;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ZhihuDaily>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
mZhihuFragment.hidProgressDialog();
mZhihuFragment.showError(e.getMessage());
}
@Override
public void onNext(ZhihuDaily zhihuDaily) {
mZhihuFragment.hidProgressDialog();
mCacheUtil.put(Config.ZHIHU, gson.toJson(zhihuDaily));
mZhihuFragment.updateList(zhihuDaily);
}
});
addSubscription(subscription);
}
@Override
public void getTheDaily(String date) {
Subscription subscription = ApiManage.getInstance().getZhihuApiService().getTheDaily(date)
.map(new Func1<ZhihuDaily, ZhihuDaily>() {
@Override
public ZhihuDaily call(ZhihuDaily zhihuDaily) {
String date = zhihuDaily.getDate();
for (ZhihuDailyItem zhihuDailyItem : zhihuDaily.getStories()) {
zhihuDailyItem.setDate(date);
}
return zhihuDaily;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ZhihuDaily>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
mZhihuFragment.hidProgressDialog();
mZhihuFragment.showError(e.getMessage());
}
@Override
public void onNext(ZhihuDaily zhihuDaily) {
mZhihuFragment.hidProgressDialog();
mZhihuFragment.updateList(zhihuDaily);
}
});
addSubscription(subscription);
}
@Override
public void getLastFromCache() {
if (mCacheUtil.getAsJSONObject(Config.ZHIHU) != null) {
ZhihuDaily zhihuDaily = gson.fromJson(mCacheUtil.getAsJSONObject(Config.ZHIHU).toString(), ZhihuDaily.class);
mZhihuFragment.updateList(zhihuDaily);
}
}
}