recherche

Maison  >  Questions et réponses  >  le corps du texte

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

为了使用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

高洛峰高洛峰2888 Il y a quelques jours507

répondre à tous(3)je répondrai

  • 天蓬老师

    天蓬老师2017-04-17 18:02:49

    Cette erreur semble être causée par Glide et n'a rien à voir avec Timer !

    Timer est une fonction d'émission retardée qui n'est exécutée qu'une seule fois. Si vous souhaitez envoyer des données régulièrement, essayez la fonction d'intervalle :

    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);
                          }
                      });

    répondre
    0
  • 迷茫

    迷茫2017-04-17 18:02:49

    Pour les tâches planifiées, il faut partir de l'intervalle, ne pensez pas toujours à partir des données

    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
        }

    L'erreur de l'affiche originale est que la minuterie est une méthode statique et que le from(getUri()) précédent n'a aucun effet. Ce qui est envoyé n'est pas l'adresse de l'image, mais le nombre de cycles. Après l'avoir lancé sur Glide, le type est faux.

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-17 18:02:49

    Suivez simplement un délai après from. L'API spécifique est la suivante http://reactivex.io/RxJava/javadoc/rx/Observable.html#delay(rx.functions.Func1)

    répondre
    0
  • Annulerrépondre