2
@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()方法。分塊流式傳輸不像預期的那樣Retrofit + RxJava
但是塊狀流預計會通過塊傳遞塊,這似乎不會發生。
我已經嘗試過,沒有@Streaming註釋到API,但行爲是相同的。
我曾使用Android Retrofit 2 + RxJava: listen to endless stream作爲參考做我的實現
感謝您的支持!我幾乎失去了我的想法試圖調試這一點。 – Rosomack
高興地幫助:)。這讓我瘋狂至少幾天 –