android - 分块流式传输不符合预期 Retrofit+RxJava

标签 android rest rx-java retrofit2

@GET("poll/session/{sessionId}/details")
Observable getSessionDetails(@Path("sessionId") String sessionId);

@GET("poll/session/{sessionId}/details")
@Streaming
Observable getSessionDetails(@Path("sessionId") String sessionId);

@Override
public Observable getSessionDetails(String sessionId) {
return sessionAPI.getSessionDetails(sessionId)
.flatMap(responseBody -> events(responseBody.source()));
}

public static Observable<String> events(BufferedSource source) {
    return Observable.create(subscriber -> {
        try {
            while (!source.exhausted()) {
                subscriber.onNext(source.readUtf8Line());
            }
        } catch (IOException e) {
            e.printStackTrace();
            subscriber.onError(e);
        }
        subscriber.onCompleted();
    });
}

除非所有 block 都完成,否则不会调用 events() 方法。

但是分块流应该逐 block 传送,这似乎并没有发生。

我尝试过使用和不使用 API 的 @Streaming 注释,但行为是相同的。

我用过Android Retrofit 2 + RxJava: listen to endless stream作为我实现的引用

最佳答案

好的伙计们,我找到了答案。这是因为我正在使用 Body 属性登录

logging.setLevel(HttpLoggingInterceptor.Level.BODY);

因此,由于记录器正在等待整个 body 打印它,因此它的行为与问题中提到的方式相同。

引用:Square's Retrofit response parsing logic: streaming?

关于android - 分块流式传输不符合预期 Retrofit+RxJava,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43795147/

相关文章:

android - kotlin 类,我在类外修改了一个列表,它最终修改了类内的值

android - 开始某些 Activity 时android程序崩溃

angular - 如何在Spring Boot中通过Spring Rest Controller 发送音频?

JavaScript 库,如 JsonViewer

android - 改造 2 后 rxjava(登录)

android - 如何从android应用程序调试共享库[单独的项目]

android - 防止 Android 重置

json - 戈朗 : Json from URL as map

java - RxJava : remove element from list

java - 对我使用 rxJava 从改造 2 获得的响应进行过滤操作