代码之家  ›  专栏  ›  技术社区  ›  StuartDTO

可在Kotlin中观察到的列表

  •  1
  • StuartDTO  · 技术社区  · 6 年前

    我有这样的服务

     @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 有什么更好的?

    编辑

    我以这个例子为例 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 回复  |  直到 6 年前
        1
  •  2
  •   punchman    6 年前

    如果您的服务器数据是单片的,那么应该使用 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 }
         )
    }