如何修复 Android 中的 RxAndroid 错误
How to fix RxAndroid bug in Android
我想开始学习 RxJava 和 RxAndroid 并且我写了下面的代码。
我将 3 个数字 添加到 Observable
中,我想用 Observer
将这个 3 个数字 显示到 Toast
中!
我添加了这个数字:1,2,3
我通过一个视频学习 Rx,在此视频中将每个数字显示为 Toast
。
但在我的代码中,只需将 last 号码显示为 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());
我想开始学习 RxJava 和 RxAndroid 并且我写了下面的代码。
我将 3 个数字 添加到 Observable
中,我想用 Observer
将这个 3 个数字 显示到 Toast
中!
我添加了这个数字:1,2,3
我通过一个视频学习 Rx,在此视频中将每个数字显示为 Toast
。
但在我的代码中,只需将 last 号码显示为 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());