首页 > 解决方案 > 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?

标签: javaandroidrx-java2rx-android

解决方案


您应该记住,当显示多个 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());

推荐阅读