Rumah > Soal Jawab > teks badan
为了使用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
天蓬老师2017-04-17 18:02:49
Ralat ini nampaknya disebabkan oleh Glide dan tiada kaitan dengan Pemasa!
Pemasa ialah fungsi pelepasan tertunda yang hanya dilaksanakan sekali. Jika anda ingin menghantar data dengan kerap, cuba fungsi selang:
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);
}
});
迷茫2017-04-17 18:02:49
Untuk tugasan yang dijadualkan, anda mesti bermula dari selang waktu, jangan selalu berfikir tentang bermula dari data
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
}
Kesilapan poster asal ialah pemasa ialah kaedah statik, dan daripada(getUri()) tidak mempunyai kesan sama sekali Apa yang dihantar bukanlah alamat imej, tetapi jenisnya adalah Panjang. Selepas melemparkannya ke Glide, jenisnya salah.
ringa_lee2017-04-17 18:02:49
Hanya ikuti kelewatan selepas dari API khusus adalah seperti berikut http://reactivex.io/RxJava/javadoc/rx/Observable.html#delay(rx.functions.Func1)