java - How to fix RxAndroid bug in Android
问题描述
I want start learn RxJava and RxAndroid and I write below codes.
I added 3 numbers into Observable
and I want show this 3 numbers into Toast
with Observer
!
I added this numbers : 1,2,3
I learn Rx with one video and in this video show each of the numbers into Toast
.
But in my code just show last number into Toast
.
My mean is : In tutorial video if he added 3 numbers show each 3 numbers into Toast
, but in my code just show last number!
My codes:
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() {
}
};
}
}
How can I fix it?
解决方案
您应该记住,当显示多个 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());
推荐阅读
- ruby-on-rails - 如何开发一个用户可以投票给其他用户的投票系统(即类似信誉的系统)?
- arrays - 将 bash 数组分成对,并匹配任一元素
- javascript - ReactJS 中的 Axios Post 调用返回 404 错误
- python - 在 Python 中将随机数分配给没有重复的变量
- oauth-2.0 - 尝试连接到 IdentityServer4 登录页面失败
- java - 如何将海报图像分配给 VideoView?
- python - 如何在 pyspark 操作中轻松使用我的自定义类方法?
- python - 在 Python 中通过 UDP 接收整数
- docker - 如何在负载均衡器后面配置 Docker 容器?
- r - 从R中的图像中提取前2-3个十六进制颜色