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

在Android上的RxJava2中组合单曲的最佳方法?

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

    private Flowable<String> fetchTopMovies(Context context, @IntRange(from = 1) int firstPage, @IntRange(from = 1) int lastPage) {
        checkArgument(firstPage > 0, "first page must be at least 1");
        checkArgument(lastPage > 0, "first page must be at least 1");
        checkArgument(lastPage >= firstPage, "last page cannot be less than first page");
    
        JsonFetcher jsonFetcher = JsonFetcher.getInstance(context);
        Flowable<String> mergedJsonsFlowable = Flowable.empty();
    
        for (int page = 0; page <= lastPage; page++) {
            String url = "https://api.themoviedb.org/3/movie/top_rated?" +
                    "api_key=4&" +
                    "language=en-US&" +
                    "page=" + page;
    
            Single<String> jsonSingle = jsonFetcher.fetchJson(url);
            mergedJsonsFlowable = mergedJsonsFlowable.mergeWith(jsonSingle);
        }
    
        return mergedJsonsFlowable;
    }
    

    如你所见,我只是收集单曲,并结合成一个流动的手。有没有更好的方法在不“断链”的情况下做到这一点?

    1 回复  |  直到 6 年前
        1
  •  0
  •   taygetos blackbot    6 年前

    我认为你有一个完美的用例 Flowable.range()

    private Flowable<String> fetchTopMovies(Context context, @IntRange(from = 1) int firstPage, @IntRange(from = 1) int lastPage) {
       ...
       JsonFetcher jsonFetcher = JsonFetcher.getInstance(context);
    
       return Flowable.range(0, lastPage)
         .map(i ->  "https://api.themoviedb.org/3/movie/top_rated?" +
           "api_key=4&" +
           "language=en-US&" +
           "page=" + i)
         .flatMapSingle(url -> jsonFetcher.fetchJson(url));
    }