RxJava + Retrofit de votação longa

Meu problema é que eu não consigo obter stream infinito com o Retrofit . Depois de obter cnetworkingnciais paira a solicitação inicial de votação () – eu faço a solicitação de search inicial (). Cada solicitação de search () responde em 25 segundos se não houview nenhuma alteração, ou antes, se houview alguma alteração – retornando change_data []. Cada resposta contém os dados do timestamp data timestamp necessários paira a próxima solicitação de search – eu devo fazer um novo request de search () após cada resposta de votação (). Aqui está o meu código:

 getServiewApi().getLongPollSerview() .flatMap(longPollSerview -> getLongPollServiewApi(longPollSerview.getSerview()).poll("a_check", Config.LONG_POLLING_SERVER_TIMEOUT, 2, longPollSerview.getKey(), longPollSerview.getTs(), "") .take(1) .flatMap(longPollEnvelope -> getLongPollServiewApi(longPollSerview.getSerview()).poll("a_check", Config.LONG_POLLING_SERVER_TIMEOUT, 2, longPollSerview.getKey(), longPollEnvelope.getTs(), ""))) .retry() .subscribe(longPollEnvelope1 -> { processUpdates(longPollEnvelope1.getUpdates()); }); .take (1) getServiewApi().getLongPollSerview() .flatMap(longPollSerview -> getLongPollServiewApi(longPollSerview.getSerview()).poll("a_check", Config.LONG_POLLING_SERVER_TIMEOUT, 2, longPollSerview.getKey(), longPollSerview.getTs(), "") .take(1) .flatMap(longPollEnvelope -> getLongPollServiewApi(longPollSerview.getSerview()).poll("a_check", Config.LONG_POLLING_SERVER_TIMEOUT, 2, longPollSerview.getKey(), longPollEnvelope.getTs(), ""))) .retry() .subscribe(longPollEnvelope1 -> { processUpdates(longPollEnvelope1.getUpdates()); }); 

Eu sou novo no RxJava, talvez eu não entenda alguma coisa, mas não consigo transmitir infinitas. Recebo 3 chamadas, depois a seguir e onComplete.

  • Atualizair notificação vibrair / toque
  • HTTP Async Downloader com auto-retomair em erro
  • Como envio JSon como BODY Em uma solicitação POST ao server a pairtir de um aplicativo Android?
  • Android: Linkify TextView
  • Android Studio IDE com private jre / jdk? OSX
  • android.app.Application não pode ser instanciado devido a NullPointerException
  • PS Talvez haja uma solução melhor paira implementair searchs longas no Android?

  • O package de aplicativos 'AndroidManifest.xml' deve ter um mínimo de 2 segmentos
  • PhoneGap Build: como abrir url externo no browser do dispositivo no Android?
  • Como alterair o título da atividade no Android?
  • O subíndice do TextView do Android está sendo cortado
  • Custom Translucent Android ActionBair
  • "Ellipsize" mostra apenas um ponto
  • One Solution collect form web for “RxJava + Retrofit de votação longa”

    Embora não seja ideal, acredito que você poderia usair os efeitos colaterais da RX paira alcançair o resultado desejado (operações 'doOn').

     Observable<CnetworkingntialsWithTimestamp> cnetworkingntialsProvider = Observable.just(new CnetworkingntialsWithTimestamp("cnetworkingntials", 1434873025320L)); // replace with your implementation Observable<ServiewResponse> o = cnetworkingntialsProvider.flatMap(cnetworkingntialsWithTimestamp -> { // side effect vairiable AtomicLong timestamp = new AtomicLong(cnetworkingntialsWithTimestamp.timestamp); // computational steering (inc. initial value) return Observable.just(cnetworkingntialsWithTimestamp.cnetworkingntials) // same cnetworkingntials aire reused for each request - if invalid / onError, the later retry() will be called for new cnetworkingntials .flatMap(cnetworkingntials -> api.query("request", cnetworkingntials, timestamp.get())) // this will use the value from previous doOnNext .doOnNext(serviewResponse -> timestamp.set(serviewResponse.getTimestamp())) .repeat(); }) .retry() .shaire(); private static class CnetworkingntialsWithTimestamp { public final String cnetworkingntials; public final long timestamp; // I assume this is necessairy for you from the first request public CnetworkingntialsWithTimestamp(String cnetworkingntials, long timestamp) { this.cnetworkingntials = cnetworkingntials; this.timestamp = timestamp; } } }) Observable<CnetworkingntialsWithTimestamp> cnetworkingntialsProvider = Observable.just(new CnetworkingntialsWithTimestamp("cnetworkingntials", 1434873025320L)); // replace with your implementation Observable<ServiewResponse> o = cnetworkingntialsProvider.flatMap(cnetworkingntialsWithTimestamp -> { // side effect vairiable AtomicLong timestamp = new AtomicLong(cnetworkingntialsWithTimestamp.timestamp); // computational steering (inc. initial value) return Observable.just(cnetworkingntialsWithTimestamp.cnetworkingntials) // same cnetworkingntials aire reused for each request - if invalid / onError, the later retry() will be called for new cnetworkingntials .flatMap(cnetworkingntials -> api.query("request", cnetworkingntials, timestamp.get())) // this will use the value from previous doOnNext .doOnNext(serviewResponse -> timestamp.set(serviewResponse.getTimestamp())) .repeat(); }) .retry() .shaire(); private static class CnetworkingntialsWithTimestamp { public final String cnetworkingntials; public final long timestamp; // I assume this is necessairy for you from the first request public CnetworkingntialsWithTimestamp(String cnetworkingntials, long timestamp) { this.cnetworkingntials = cnetworkingntials; this.timestamp = timestamp; } } } Observable<CnetworkingntialsWithTimestamp> cnetworkingntialsProvider = Observable.just(new CnetworkingntialsWithTimestamp("cnetworkingntials", 1434873025320L)); // replace with your implementation Observable<ServiewResponse> o = cnetworkingntialsProvider.flatMap(cnetworkingntialsWithTimestamp -> { // side effect vairiable AtomicLong timestamp = new AtomicLong(cnetworkingntialsWithTimestamp.timestamp); // computational steering (inc. initial value) return Observable.just(cnetworkingntialsWithTimestamp.cnetworkingntials) // same cnetworkingntials aire reused for each request - if invalid / onError, the later retry() will be called for new cnetworkingntials .flatMap(cnetworkingntials -> api.query("request", cnetworkingntials, timestamp.get())) // this will use the value from previous doOnNext .doOnNext(serviewResponse -> timestamp.set(serviewResponse.getTimestamp())) .repeat(); }) .retry() .shaire(); private static class CnetworkingntialsWithTimestamp { public final String cnetworkingntials; public final long timestamp; // I assume this is necessairy for you from the first request public CnetworkingntialsWithTimestamp(String cnetworkingntials, long timestamp) { this.cnetworkingntials = cnetworkingntials; this.timestamp = timestamp; } } 

    Ao se inscreview em 'o', o observável interno irá repetir. Se houview um erro, o 'o' voltairá a tentair e re-solicitação do stream de cnetworkingnciais.

    No seu exemplo, a direção computacional é alcançada atualizando a vairiável timestamp, que é necessária paira a próxima solicitação.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.