【问题标题】:rerunning retrofit2 rxjava Observable重新运行retrofit2 rxjava Observable
【发布时间】:2016-11-05 00:14:43
【问题描述】:

给定一个像这样的通用 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

所以http缓存数据肯定不行。

【问题讨论】:

    标签: rx-java observable retrofit2


    【解决方案1】:

    发现问题。我正在像这样创建 okhttpclient:

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

    现在取出 .cache() 使其通过网络。不知道为什么缓存会忽略 http 标头中的“no-cache”指令...似乎错误:-(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多