Наблюдаемый список в Котлине - PullRequest
0 голосов
/ 22 октября 2018

У меня есть сервис, подобный этому

 @GET("/")
fun getInfo(@Query("pew") pew1: Double, @Query("pew2") pew2: Double): Observable<PewResponse>

Так что теперь, когда у меня есть этот

, у меня есть список для заполнения данными сервера

private var mPewList: MutableList<PewList> = arrayListOf()

Итогда у меня есть эта функция

override fun getResultFromNetwork(): Observable<PewResponse> {
    val pewObservable = pewService.getInfo("pew1","pew2")
    return pewObservable.concatMap {
      //How do I fill my list ??

    }


}

Я довольно новичок в этом rxJava, поэтому я видел людей, использующих Single и других парней, использующих Observable, что лучше?

EDIT

Я следую этому примеру https://github.com/joanby/android-mvp/blob/master/MoviesFeed/app/src/main/java/com/juangabriel/moviesfeed/movies/MoviesRepository.java

И теперь я хочу сделать что-то вроде этого:

@Override
public Observable<Result> getResultFromNetwork() {

    Observable<TopMoviesRated> topMoviesRatedObservable = moviesApiService.getTopMoviesRated(1)
            /*.concatWith(moviesApiService.getTopMoviesRated(2))
            .concatWith(moviesApiService.getTopMoviesRated(3))*/;

    return topMoviesRatedObservable
            .concatMap(new Function<TopMoviesRated, Observable<Result>>() {
                @Override
                public Observable<Result> apply(TopMoviesRated topMoviesRated) {
                    return Observable.fromIterable(topMoviesRated.getResults());
                }
            }).doOnNext(new Consumer<Result>() {
                @Override
                public void accept(Result result) {
                    results.add(result);
                }
            });

}

Так что, как я вижу, он заполняет список результатов, а затем на докладчике сделать это: https://github.com/joanby/android-mvp/blob/master/MoviesFeed/app/src/main/java/com/juangabriel/moviesfeed/movies/MoviesPresenter.java

1 Ответ

0 голосов
/ 22 октября 2018

Если ваши данные с сервера являются монолитными, вы должны использовать Single, поскольку они возвращают только один раз значение.Observable будет делать, когда ваши данные поступают кусками.

Для более подробной информации вы можете увидеть этот ответ: https://stackoverflow.com/a/42759432/9060113

РЕДАКТИРОВАТЬ:

@GET("/")
fun getInfo(@Query("pew") pew1: Double, @Query("pew2") pew2: Double): Single<PewResponse>


override fun getResultFromNetwork() {
  pewService
     .getInfo("pew1","pew2")
     .subscribeOn(Schedulers.io()) // for background processing
     .observeOn(AndroidSchedulers.mainThread()) // get result in Main Thread (it require rxAndroid lib)
     .subscribe(
       { pewResponse -> // parse response and fill list },
       { // handle error }
     )
}
...