2017-09-14 2 views
1

Aktuelle CodeWie übergeben benutzerdefinierte Pojo als Parameter an die Schnittstelle Methode Aufruf in rxjava2 Observable?

Observable.from(listMovie)//list of movie 
      .flatMap(new Func1<Movie, Observable<FavMovieRes>>() { 
       @Override 
       public Observable<FavMovieRes> call(Movie movie) { 
        return moviesAPI.makeMovieFav(userId), 
        sessionId, new MakeMovieFav("movie", movie.getId(), movie.isFavList())); 
       } 
      }) 
      .subscribe(new Subscriber<FavMovieRes>() { 
     @Override 
     public void onCompleted() { 

     } 

     @Override 
     public void onError(Throwable e) { 

     } 

     @Override 
     public void onNext(FavMovieRes favMovieRes) { 

     } 
    }); 

In obigem Code I Movie-Objektliste zu den beobachtbaren am Übergang und eine Operation an jedem Film Instanz in der Liste durchführen, wenn resultiert aus der API bekommt ich eine Datenbank in Bezug auf diesem Film ändern möchte Beispiel, wie kann ich jede Movie-Instanz in OnNext() sowie onError-Methode der subscribe-Methode erhalten. , was ich will, ist

Observable.from(listMovie) 
       .flatMap(new Func1<Movie, Observable<FavMovieRes>>() { 
        @Override 
        public Observable<FavMovieRes> call(Movie movie) { 
         return moviesAPI.makeMovieFav(String.valueOf(SharedPreferenceDataManager.getUserId(SyncFavListPeriodicTask.this)), SharedPreferenceDataManager.getSessionId(SyncFavListPeriodicTask.this), new MakeMovieFav("movie", movie.getId(), movie.isFavList())); 
        } 
       }).subscribe(new Subscriber<FavMovieRes>() { 
      @Override 
      public void onCompleted() { 

      } 

      @Override 
      public void onError(Throwable e,Movie movie) {//or MakeMovieFav makeMovieFav 

      } 

      @Override 
      public void onNext(FavMovieRes favMovieRes,Movie movie) {//or MakeMovieFav makeMovieFav 

      } 
     }); 

Antwort

0

Ich denke, Sie haben eine Liste und wollen jedes empfangene Element für eine andere einzelne async Betrieb verarbeiten. In diesem Fall können Sie jedes Ergebnis in eine flache Darstellung bringen.

flatMapIterable bedeutet, dass es jeden Eintrag in der Liste als Observable zur nächsten Operation in Ihrem Stream aufteilt. flatMap bedeutet, dass eine Operation für den empfangenen Wert ausgeführt wird.

Wenn Sie die Ergebnisse wieder zusammensetzen möchten, können Sie toList nach FlatMap verwenden.

Sie müssen eine Observable (Operation) für Ihre Flatmap erstellen.

Kotlin:

Observable.just(data) 
     .flatMapIterable { it } 
     .flatMap{ moviesAPI.makeMovieFavObservable(whatEver) } 
     .subscribe(... , ... , ...) 

Java (Ungeprüfte)

Observable.just(data) 
      //parse each item in the list and return it as observable 
      .flatMapIterable(d -> d) 
      // use each item and to another observable operation 
      .flatMap(data -> Observable.just(moviesAPI.movieStuff(data)))       
      // use each result and put it back into a list 
      .toList() // put the result back to a list 
      // subscribe it and log the result with Tag data, throw the error and output when completed 
      .subscribe(data -> Log.d("Data", "Data received "+ data), 
         error -> error.printStackTrace(), 
         () -> Log.d("Completed", "Completed") 
      ); 
+0

Nein, dass ich mich schon erreichen will, die Daten zu erhalten, die ich auf die Daten nicht nach dem process.In verarbeiten In diesem Fall jedes Ergebnis-Objekt Ich möchte es in einem Methodenaufruf (Ergebnis-Ergebnis) und Aufruf (Throwable throwable, Ergebnis-Ergebnis). – Ajinkya

Verwandte Themen