如何修复Android中的RxAndroid错误

时间:2019-02-14 06:47:54

标签: java android rx-java2 rx-android

我想开始学习 RxJava RxAndroid ,并编写以下代码。
我在Observable中添加了 3个数字,并想用ToastObserver中显示此 3个数字
我添加了以下数字: 1,2,3
我通过一部视频学习了 Rx ,并在此视频中将每个数字显示在Toast中。
但是在我的代码中,只需在<{1}中显示最后个数字即可。
我的意思是::在教程视频中,如果他添加了 3个数字,请在Toast中显示每个3个数字,但在我的代码中仅显示最后一个 >号!
我的代码:

Toast

我该如何解决?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:-1)

您必须使用from()。 尝试以下代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));

        Observable<Integer> observable = Observable.fromIterable(list);

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

            }
        };
    }
}

Observable.from()Observable.just()-Observable.just()之间的差异仅发出一次,而Observable.from()发出n次,即数组的长度,在这种情况下为3。

编辑 尝试以下代码:

Observable.just(1, 2, 3)
                .forEach(o->Toast.makeText(MainActivity.this, o + "", Toast.LENGTH_SHORT).show());