【发布时间】:2017-05-05 01:37:25
【问题描述】:
@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();
});
}
除非所有块都完成,否则不会调用 events() 方法。
但预计分块流将逐块传送,这似乎没有发生。
我尝试过对 API 使用和不使用 @Streaming 注释,但行为是相同的。
我曾使用Android Retrofit 2 + RxJava: listen to endless stream 作为参考来执行我的实现
【问题讨论】:
标签: android rest rx-java retrofit2