使用Retrofit rxjava concatWith时堆栈溢出

布万

我想使用rxjava Observable处理翻新中的分页。我听了另一个问题的建议

我有100多个页面需要获取,但是链在第20页左右失败,并且在logcat中使用以下日志停止了对可观察对象的任何进一步订阅

04-04 04:12:11.766    2951-3012/com.example.app I/dalvikvm﹕ threadid=28: stack overflow on call to Ljava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;.compareAndSet:ZLJJ
04-04 04:12:11.766    2951-3012/com.example.app I/dalvikvm﹕ method requires 56+20+32=108 bytes, fp is 0x94b52350 (80 left)
04-04 04:12:11.766    2951-3012/com.example.app I/dalvikvm﹕ expanding stack end (0x94b52300 to 0x94b52000)
04-04 04:12:11.766    2951-3012/com.example.app I/dalvikvm﹕ Shrank stack (to 0x94b52300, curFrame is 0x94b548dc)

有人知道为什么会发生这种情况吗?

更新:我知道这是由于递归而发生的,但是有没有更优雅的方式来处理带有翻新和rxjava的分页?

par

因此,鉴于我回答了您引用的原始问题,我可能也应该尝试回答这种情况。:)

这是我最初的寻呼答案的另一种有效(且可能更简单)的替代方法,因为我已经在军械库中开发了更多的Rx技巧。:)(以java8 lambda样式的伪代码完成):

Observable.range(Integer.MAX_VALUE)
    // Get each page in order.
    .concatMap(page -> getResults(page))
    // Take every result up to and including the one where the next page index is null.
    .takeUntil(result -> result.next == null)
    // Add each output to a list builder. I'm using Guava's ImmutableList, but you could
    // just as easily use a regular ArrayList and avoid having to map afterwards. I just
    // personally prefer outputting an immutable data structure, and using the builder
    // is natural for this.
    //
    // Also, if you wanted to have the observable stream the full output at each page,
    // you could use collect instead of reduce. Note it has a slightly different syntax. 
    .reduce(
        ImmutableList.<ResponseObject>builder(),
        (builder, response) -> builder.addAll(response.results))
    // Convert list builder to one List<ResponseObject> of all the things.
    .map(builder -> builder.build())
    .subscribe(results -> { /* Do something with results. */ });

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Retrofit和Rxjava时出错

来自分类Dev

使用RxJava + Retrofit 2的正确方法

来自分类Dev

使用 RxJava 和 Retrofit 处理不同的流程

来自分类Dev

使用递归函数时的C ++堆栈溢出

来自分类Dev

使用Retrofit和RxJava,当不直接映射到模型对象时,如何反序列化JSON?

来自分类Dev

RxJava + Retrofit轮询

来自分类Dev

使用RxJava / RxAndroid的Retrofit2尾递归

来自分类Dev

如何使用Retrofit2 + RxJava添加授权标头

来自分类Dev

使用Retrofit和Realm纠正RxJava中的流程

来自分类Dev

如何使用RxJava处理Retrofit 2中的网络错误

来自分类Dev

在Android中使用RxJava和Retrofit处理列表

来自分类Dev

使用RxJava + Retrofit对列表中的每个项目进行API请求

来自分类Dev

如何使用rxjava在Retrofit 2.0中获取请求url?

来自分类Dev

如何使用RxJava处理Retrofit 2中的网络错误

来自分类Dev

使用Retrofit和Realm纠正RxJava中的流程

来自分类Dev

使用Retrofit2和RxJava获取分页URL

来自分类Dev

使用Dagger + Retrofit + RxJava创建适配器错误

来自分类Dev

使用 RXJava 和 Retrofit 正确实现的网络调用 - Android

来自分类Dev

RxJava 和 Retrofit 使用多个平面图处理分页

来自分类Dev

如何使用 Kotlin、Retrofit 和 RXjava 填充列表视图

来自分类Dev

使用lamba函数时可能出现堆栈溢出?

来自分类Dev

为什么在使用异步操作时没有堆栈溢出?

来自分类Dev

使用UDF处理多个列时发生堆栈溢出

来自分类Dev

使用scalaz的免费monad时如何避免堆栈溢出?

来自分类Dev

使用解析器组合器时堆栈溢出

来自分类Dev

使用 RxKotlin 时如何指定 RxJava 的版本?

来自分类Dev

RxJava and Retrofit2: NetworkOnMainThreadException

来自分类Dev

Retrofit + RxJava中的链接请求

来自分类Dev

RxJava-当返回可能为null时使用flatmap

Related 相关文章

  1. 1

    使用Retrofit和Rxjava时出错

  2. 2

    使用RxJava + Retrofit 2的正确方法

  3. 3

    使用 RxJava 和 Retrofit 处理不同的流程

  4. 4

    使用递归函数时的C ++堆栈溢出

  5. 5

    使用Retrofit和RxJava,当不直接映射到模型对象时,如何反序列化JSON?

  6. 6

    RxJava + Retrofit轮询

  7. 7

    使用RxJava / RxAndroid的Retrofit2尾递归

  8. 8

    如何使用Retrofit2 + RxJava添加授权标头

  9. 9

    使用Retrofit和Realm纠正RxJava中的流程

  10. 10

    如何使用RxJava处理Retrofit 2中的网络错误

  11. 11

    在Android中使用RxJava和Retrofit处理列表

  12. 12

    使用RxJava + Retrofit对列表中的每个项目进行API请求

  13. 13

    如何使用rxjava在Retrofit 2.0中获取请求url?

  14. 14

    如何使用RxJava处理Retrofit 2中的网络错误

  15. 15

    使用Retrofit和Realm纠正RxJava中的流程

  16. 16

    使用Retrofit2和RxJava获取分页URL

  17. 17

    使用Dagger + Retrofit + RxJava创建适配器错误

  18. 18

    使用 RXJava 和 Retrofit 正确实现的网络调用 - Android

  19. 19

    RxJava 和 Retrofit 使用多个平面图处理分页

  20. 20

    如何使用 Kotlin、Retrofit 和 RXjava 填充列表视图

  21. 21

    使用lamba函数时可能出现堆栈溢出?

  22. 22

    为什么在使用异步操作时没有堆栈溢出?

  23. 23

    使用UDF处理多个列时发生堆栈溢出

  24. 24

    使用scalaz的免费monad时如何避免堆栈溢出?

  25. 25

    使用解析器组合器时堆栈溢出

  26. 26

    使用 RxKotlin 时如何指定 RxJava 的版本?

  27. 27

    RxJava and Retrofit2: NetworkOnMainThreadException

  28. 28

    Retrofit + RxJava中的链接请求

  29. 29

    RxJava-当返回可能为null时使用flatmap

热门标签

归档