重新运行retrofit2 rxjava Observable

时间:2016-07-02 21:54:36

标签: rx-java observable retrofit2

给出一个像这样的通用Retrofit2 Rxjava调用:

mMbtaApi.getFullAlerts(ApiConfig.MBTA_API_KEY)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.subscribe(alerts -> {
                                mAlerts = alerts;
                                mAlertListSubject.onNext(getFilteredAlerts());
                                mLoadSubscription.unsubscribe();
                            },
                            err -> {
                                mAlertListSubject.onError(err);
                                mLoadSubscription.unsubscribe();
                            });

你如何重新执行它? 我认为这样的事情会这样做(单独订阅应该这样做,但我添加了取消订阅以防万一):

alerts = mMbtaApi.getFullAlerts(ApiConfig.MBTA_API_KEY)
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.computation())

alerts.unsubscribe(handler)
alerts.subscribe(handler)

但是当我进行第二次订阅时,我没有看到任何网络流量消失。 警报HTTP返回标头指示不应缓存数据:

Cache-Control   no-cache
Pragma  no-cache
Content-Type    application/json; charset=utf-8
Expires -1

所以它肯定不是okhttp缓存数据。

1 个答案:

答案 0 :(得分:0)

发现问题。我是这样创建okhttpclient的:

final OkHttpClient.Builder builder = new OkHttpClient.Builder();
return builder.cache(new Cache(context.getCacheDir(), cacheSize)).build()

取出.cache()现在让它通过网络。不知道为什么高速缓存忽略了http标头中的“no-cache”指令,但似乎错了: - (