2015-10-22 7 views
5

Y koşulu yükseltilene kadar her x saniyede bir güçlendirme kullanarak bir web servisine çağrı yapmak istiyorum.RXJava x saat sonra nasıl elde edilmeye çalışılır

Yanıt null olana kadar x saniye sonra OrderApi.get çalıştırmak istiyorum.

public class OrderApi {} 
    public static Observable<Order> get() { 
     //... 
    } 
} 


OrderApi.get(order.getId())) 
     .subscribe(updatedOrder -> { 
      mShouldRun = updatedOrder != null; 
     }); 

Zaten Observable.delay Observable.timber gibi operatörler gördüm ama düzgün kullanmak için bir yol bulamıyorum.

cevap

4

bu durdurmak için

Observable.interval(1, TimeUnit.SECONDS) 
       .flatMap(new Func1<Long, Observable<?>>() { 
        @Override 
        public Observable<?> call(Long aLong) { 
         return OrderApi.get(); 
        } 
       }).takeUntil(new Func1<Object, Boolean>() { 
      @Override 
      public Boolean call(Object o) { 
       return o==null; 
      } 
     }).subscribe(observer); 
+1

Bu cevabı seçiyorum çünkü 'Gözlemlenebilir.interval', 'takeUntil' false olana kadar nesneleri sonsuza kadar yayar. 'Observable.timer' sadece bir nesneyi yaymak için x zamanı bekleyin. – Caipivara

1

timer ve repeat bir arada o

Observable.timer(1000, TimeUnit.MILLISECONDS) 
     .subscribeOn(Schedulers.io()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .repeat(Schedulers.io()) 
     .subscribe(new Action1<Object>() { 
      @Override 
      public void call(Object aLong) { 
       System.out.println(System.currentTimeMillis()); 
      } 
     }); 

geri arama call her 1 sn

+0

ve çalışması gerekir denir yapmalıyım? Özelliği nasıl kontrol edebilirim ve gözlemlenebilir durağı nasıl yapabilirim? – Caipivara

+1

'subscribe'' Abonelik' seçeneğini döndürür. Eski bir referans ve "aboneliği iptal et"() iptal etmek istediğinizde – Blackbelt

+0

Bu cevabı seçin çünkü 'Observable.interval' nesnesi takeUntil false olana kadar sonsuza kadar yayar. 'Observable.timer' sadece bir nesneyi yaymak için x zamanı bekleyin. – Caipivara