繁体   English   中英

如何修复Android中的RxAndroid错误

[英]How to fix RxAndroid bug in Android

我想开始学习RxJavaRxAndroid,并编写以下代码。
我在Observable添加了3个数字 ,我想用ObserverToast显示这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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM