阿正日报
1、关于项目的整体UML类图:

2、主要技术介绍
RxJava:
用一个词概括RxJava,那就是“异步”。当然,在Android的开发过程中,实现异步操作的有很多,Handle,AsyncTask...,那么,为什么越来越多的人开始喜欢RxJava了呢。因为RxJava“简洁”,当逻辑越复杂是,RxJava显得越简洁。
RxJava 的异步实现,是通过一种扩展的观察者模式来实现的。观察者模式面向的需求是:A 对象(观察者)对 B 对象(被观察者)的某种变化高度敏感,需要在 B 变化的一瞬间做出反应。举个例子,新闻里喜闻乐见的警察抓小偷,警察需要在小偷伸手作案的时候实施抓捕。Android 开发中一个比较典型的例子是点击监听器 OnClickListener 。对设置OnClickListener 来说, View 是被观察者, OnClickListener 是观察者,二者通过 setOnClickListener() 方法达成订阅关系。
RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() / onEvent())之外,还定义了两个特殊的事件:onCompleted() 和 onError()。
onCompleted(): 事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的onNext()发出时,需要触发onCompleted()方法作为标志。onError(): 事件队列异常。在事件处理过程中出异常时,onError()会被触发,同时队列自动终止,不允许再有事件发出。- 在一个正确运行的事件序列中,
onCompleted()和onError()有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted()和onError()二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。

public void getLastZhihuNews() {
zhihuFragment.showProgressDialog();
Subscription subscription = ApiManage.getInstence().getZhihuApiService().getLastDaily()
/*
* map(): 事件对象的直接变换
* Func1<T,R> -> R call(T t)
* 将T 变换成R并返回
*/
.map(new Func1<ZhihuDaily, ZhihuDaily>() {
@Override
public ZhihuDaily call(ZhihuDaily zhihuDaily) {
return zhihuDaily;
}
})
.subscribeOn(Schedulers.io()) // 指定 subscribe() ,即事件发生在 IO 线程
.observeOn(AndroidSchedulers.mainThread()) // 指定 Subscriber 的回调发生,事件消费在主线程
.subscribe(new Observer<ZhihuDaily>() { //订阅,Observer为观察者
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
zhihuFragment.hidProgressDialog();
zhihuFragment.showError(e.getMessage());
}
@Override
public void onNext(ZhihuDaily zhihuDaily) {
zhihuFragment.hidProgressDialog();
//Log.d("ZhihuPresenterImpl", gson.toJson(zhihuDaily));
cacheUtil.put(Config.ZHIHU, gson.toJson(zhihuDaily));
zhihuFragment.updateList(zhihuDaily);
zhihuFragment.getTopStory(zhihuDaily);
}
});
addSubscription(subscription);

浙公网安备 33010602011771号