为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕姐8265434 2019-03-21 18:15:37
为了使用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
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

你这个错误貌似你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);

                      }

                  });


查看完整回答
反对 回复 2019-04-19
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

对于定时任务,必然是从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后类型出错。


查看完整回答
反对 回复 2019-04-19
  • 3 回答
  • 0 关注
  • 814 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号