Один наблюдаемый с несколькими подписчиками

у меня естьObservable<<List<Foo>> getFoo() который создается из модифицированной службы и после вызова.getFoo() метод, мне нужно поделиться с несколькими подписчиками. Вызов.share() хотя этот метод вызывает повторный запуск сетевого вызова. Оператор воспроизведения также не работает. Я знаю, что потенциальное решение может быть.cache(), но я не знаю, почему это поведение вызвано.

// Create an instance of our GitHub API interface.
Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build();

// Create a call instance for looking up Retrofit contributors.
Observable<List<Contributor>> testObservable = retrofit
        .create(GitHub.class)
        .contributors("square", "retrofit")
        .share();

Subscription subscription1 = testObservable
       .subscribe(new Subscriber<List<Contributor>>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onNext(List<Contributor> contributors) {
                System.out.println(contributors);
            }
         });

Subscription subscription2 = testObservable
        .subscribe(new Subscriber<List<Contributor>>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onNext(List<Contributor> contributors) {
                System.out.println(contributors + " -> 2");
            }
         });

subscription1.unsubscribe();
subscription2.unsubscribe();

Код выше может воспроизвести вышеупомянутое поведение. Вы можете отладить его и увидеть, что полученные списки принадлежат другому адресу памяти.

Я также рассматривал ConnectableObservables как потенциальное решение, но для этого нужно, чтобы я носил оригинальную наблюдаемую информацию и вызывал.connect() каждый раз, когда я хочу добавить нового подписчика.

Такое поведение с.share() работал нормально до дооснащения 1.9. Перестал работать на Retrofit 2 - бета. Я еще не тестировал его с Retrofit 2 Release Version, выпущенной несколько часов назад.

РЕДАКТИРОВАТЬ: 01/02/2017

Для будущих читателей я написал статьюВот объясняя больше о деле!

Ответы на вопрос(2)

Ваш ответ на вопрос