(点击
上方公众号
,可快速关注)
来源:伯乐在线专栏作者 - Code4Android
链接:http://android.jobbole.com/85251/
点击 → 了解如何加入专栏作者
接上文
Range
该操作符创建特定整数序列的Observable,它接受两个参数,一个是范围的起始值,一个是范围的数据的数目。如果你将第二个参数设为0,将导致Observable不发射任何数据(如果设置为负数,会抛异常)。
Observable
.
range
(
1
,
4
)
.
subscribe
(
new
SubscriberInteger
>
()
{
public
String
TAG
=
"RXJAVA"
;
@
Override
public
void
onCompleted
()
{
Log
.
e
(
TAG
,
"onCompleted: "
);
}
@
Override
public
void
onError
(
Throwable
e
)
{
Log
.
e
(
TAG
,
"onError: "
);
}
@
Override
public
void
onNext
(
Integer
integer
)
{
Log
.
e
(
TAG
,
"onNext: "
+
integer
);
}
});
输出信息
onNext
:
1
onNext
:
2
onNext
:
3
onNext
:
4
onCompleted
:
你可以在代码实战中,更改第二个参数为负数,或者0,以及将第一个参数更改为你想测试的任意值,去观察执行日志帮助理解。
Timer
Timer操作符创建一个在给定的时间段之后返回一个特殊值的Observable。它在延迟一段给定的时间后发射一个简单的数字0 。
Observable
.
timer
(
1
,
TimeUnit
.
SECONDS
)
.
subscribe
(
new
Subscriber
()
{
public
String
TAG
=
"RXJAVA"
;
@
Override
public
void
onCompleted
()
{
Log
.
e
(
TAG
,
"onCompleted: "
);
}
@
Override
public
void
onError
(
Throwable
e
)
{
Log
.
e
(
TAG
,
"onError: "
);
}
@
Override
public
void
onNext
(
Long
integer
)
{
Log
.
e
(
TAG
,
"onNext:1111111 "
+
integer
);
}
});
对于该操作符默认在computation调度器上执行的,如果你想在onNext()回调方法更新UI,需要通过observeOn(AndroidSchedulers.mainThread())设置,否则会调用onError()方法。当然Time人提供的有一个三个参数的方法timer(long,TimeUnit,Scheduler)可以指定 Scheduler 。
Interval
该操作符按固定的时间间隔发射一个无限递增的整数序列,它接受一个表示时间间隔的参数和一个表示时间单位的参数,当然该操作符合Timer一样,是在computation调度器上执行的,若想更新UI需要指定Scheduler 为AndroidSchedulers.mainThread()。
Subscription
subscription
=
Observable
.
interval
(
1
,
TimeUnit
.
SECONDS
)
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
new
Action1
()
{
@
Override
public
void
call
(
Long
aLong
)
{
tv
.
append
(
" "
+
aLong
+
" "
);
}
});
通过上面代码就会每隔1秒在tv上追加一个数字,并且会永远执行。如果在某个时刻不想继续输出,就需要要解除订阅。
if
(
subscription
!=
null
&& !
subscription
.
isUnsubscribed
())
{
subscription
.
unsubscribe
();
}
Repeat
该操作符是重复的发射某个数据序列,并且可以自己设置重复的次数。当接收到onComplete()会触发重订阅再次重复发射数据,当重复发射数据次数到达后执行onCompleted()。
String
[]
strs
=
{
"也许当初忙着微笑和哭泣"
,
"忙着追逐天空中的流星"
};
Observable
.
from
(
strs
).
repeat
(
2
)..
subscribe
(
new
Subscriber
()
{
@
Override
public
void
onCompleted
()
{
Log
.
e
(
TAG
,
"onCompleted: "
);
}
@
Override
public
void
onError
(
Throwable
e
)
{
Log
.
e
(
TAG
,
"onError: "
);
}
@
Override
public
void
onNext
(
String
s
)
{
Log
.
e
(
TAG
,
"onNext: "
+
s
);
tv1
.
append
(
"\n"
+
s
);
}
});
输出
onNext
:
也许当初忙着微笑和哭泣
onNext
:
忙着追逐天空中的流星
onNext
:
也许当初忙着微笑和哭泣
onNext
:
忙着追逐天空中的流星
onCompleted
:
Defer
直到有观察者订阅时才创建Observable,并且为每个观察者创建一个新的Observable,该操作符能保证订阅执行时数据源是最新的数据。如下正常代码
String
test
=
"旧数据"
;
Observable
observable
=
Observable
.
just
(
test
);
Subscriber
subscriber
=
new
Subscriber
()
{
public
String
TAG
=
"RXJAVA"
;
@
Override
public
void
onCompleted
()
{
Log
.
e
(
TAG
,
"onCompleted: "
);
}
@
Override
public
void
onError
(
Throwable
e
)
{
Log
.
e
(
TAG
,
"onError: "
);
}
@
Override
public
void
onNext
(
Object
o
)
{
Log
.
e
(
TAG
,
"onNext: "
+
o
);
}
};
test
=
"新数据"
;
observable
.
subscribe