【问题标题】:How to fix RxAndroid bug in Android如何修复 Android 中的 RxAndroid 错误
【发布时间】:2019-02-14 06:47:54
【问题描述】:

我想开始学习 RxJavaRxAndroid,并编写以下代码。
我在 Observable 中添加了 3 个数字,我想将这 3 个数字 显示到 ToastObserver
我添加了这个数字:1,2,3
我通过一个视频学习 Rx,并在此视频中将每个数字显示为 Toast
但在我的代码中,只需将 last 数字显示为 Toast
我的意思是: 在教程视频中,如果他添加了 3 个数字 显示每 3 个数字输入 Toast,但在我的代码中只显示 last 数字!
我的代码:

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() {

            }
        };
    }
}

我该如何解决?

【问题讨论】:

    标签: java android rx-java2 rx-android


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多