RxJava使用from操作符之后怎么每次发射数据时延迟一段时间

发布于 2022-09-02 19:35:30 字数 656 浏览 14 评论 0

为了使用RxJava实现在ImageView中每隔指定时间加载一张系统图片的效果,

Observable.from(getUri()).timer(2,TimeUnit.SECONDS).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(uri
-> {
            Log.e("uri",uri+"");
            Glide.with(this).load(uri).into(img);}); 
            }

在getUri()中返回了一个ArrayList<Uri>对象,然后每次发射一个uri到订阅者中,怎么让这个发射过程延迟调用。
使用timer操作符出现了以下错误:Unknown type class java.lang.Long. You must provide a Model of a type for which there is a registered ModelLoader, if you are using a custom model, you must first call Glide#register with a ModelLoaderFactory for your custom model class

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

庆幸我还是我 2022-09-09 19:35:30

你这个错误貌似你Glide引起的,和Timer没什么关系把!

timer是延时发射函数,只执行一次。想要定时发送数据,试试interval函数:

Observable.interval(2, TimeUnit.SECONDS)
                  .map(new Func1<Long, String>() {
                      @Override
                      public String call(Long aLong) {
                          return getUrl();
                      }
                  })
                  .subscribe(new Subscriber<String>() {
                      @Override
                      public void onCompleted() {

                      }

                      @Override
                      public void onError(Throwable e) {

                      }

                      @Override
                      public void onNext(String o) {
                          Log.d("xxx interval with func", o);
                      }
                  });
稀香 2022-09-09 19:35:30

对于定时任务,必然是从interval开始,不要老想着从数据开始

public void loop() {
    final List<String> images = getUri();//图片列表
    Observable.interval(0, 2, TimeUnit.SECONDS)//每2秒执行1次,第一次立即执行
              .map(i -> images.get(i.intValue() % images.size()))//把循环次数变成图片路径
              .subscribe(uri -> Glide.with(ctx).load(uri).into(img));//调用Glide
    }

楼主的错误在于,timer是静态方法,前面的from(getUri())根本没起到作用,发送出来的不是图片地址,而是循环次数,类型是Long,丢给Glide后类型出错。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文