[英]How to fix RxAndroid bug in Android
我想开始学习RxJava和RxAndroid,并编写以下代码。
我在Observable
添加了3个数字 ,我想用Observer
在Toast
显示这3个数字 !
我加了这个数字: 1,2,3
我通过一个视频学习Rx ,并在此视频中将每个数字显示到Toast
。
但是在我的代码中,只显示Toast
最后一个数字。
我的意思是:在教学视频中,如果他添加3个数字,则将每个3 个数字显示在Toast
,但在我的代码中,仅显示最后一个数字!
我的代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Observable<Integer> observable = Observable.just(1, 2, 3);
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer());
}
private Observer<Integer> observer() {
return new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Integer integer) {
Toast.makeText(MainActivity.this, integer + "", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
}
}
我该如何解决?
您应该记住,当显示多个Toast时,它们会重叠。
您可以看到最后的烤面包,因为这些烤面包以彼此相同的时间立即显示并顺序显示,并且它们重叠并且可以看到最后一个。
使用一些日志进行测试,或者在每个发射的项目之间放置一个间隔。 使用以下方法添加concatMap
函数:
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.concatMap(new Function<Integer, ObservableSource<Integer>>() {
@Override
public ObservableSource<Integer> apply(final Integer integer) {
return Observable.interval(2, TimeUnit.SECONDS)
.take(1)
.map(new Function<Integer, Integer>() {
@Override
public Integer apply(Integer aLong) {
return integer;
}
});
}
})
.subscribe(observer());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.