Java 即使在onComplete()之后仍保持流活动

Java 即使在onComplete()之后仍保持流活动,java,android,rx-java,reactive-programming,rx-java2,Java,Android,Rx Java,Reactive Programming,Rx Java2,我目前面临两个问题 1) 只要调用行provider.getInstance().getCurrentWeather(…),网络调用就完成了。它怎么能被推迟到观察者连接到它 2) 调用weatherInfoPublisher.onComplete()后,下次在此对象上调用onComplete时,不会调用新观察者的onNext public Observable<LinkedList<WeatherInfo>> getWeatherData(final String pay

我目前面临两个问题

1) 只要调用行
provider.getInstance().getCurrentWeather(…)
,网络调用就完成了。它怎么能被推迟到观察者连接到它

2) 调用
weatherInfoPublisher.onComplete()
后,下次在此对象上调用onComplete时,不会调用新观察者的onNext

public Observable<LinkedList<WeatherInfo>> getWeatherData(final String payload, final TempUnit tempUnit) {

        PublishSubject weatherInfoPublisher = PublishSubject.create();

        RetrofitProvider.getInstance().getCurrentWeather(payload + ",us", translateTempUnit(tempUnit))
            .flatMap(new Function<String, ObservableSource<String>>() {
                @Override
                public ObservableSource<String> apply(String todayResponse) throws Exception {

                    Log.d(TAG, "Received today weather: " + todayResponse);

                    parseTodayData(todayResponse, weatherDataList);
                    return RetrofitProvider.getInstance().getForecastWeather(
                            payload + ",us", translateTempUnit(tempUnit), FORECAST_DAYS);
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(new DisposableObserver<String>() {
                @Override
                public void onNext(String futureResponse) {

                    Log.d(TAG, "Received future weather: " + futureResponse);
                    parseFutureData(futureResponse, weatherDataList);

                    weatherInfoPublisher.onNext(weatherDataList);
                    weatherInfoPublisher.onComplete();
                }

                @Override
                public void onError(Throwable e) {
                    Log.e(TAG, "The error is, " + e.getMessage());
                }

                @Override
                public void onComplete() {

                }
            });

        return weatherInfoPublisher;
    }
public Observable getWeatherData(最终字符串有效负载、最终临时单位临时单位){
PublishSubject weatherInfoPpublisher=PublishSubject.create();
更新provider.getInstance().getCurrentWeather(有效载荷+“,美国”,translateTempUnit(临时单位))
.flatMap(新函数(){
@凌驾
公共ObservableSourceApply(字符串todayResponse)引发异常{
Log.d(标签“今天收到天气:“+today响应”);
parseTodayData(todayResponse,weatherDataList);
返回provider.getInstance().getForecastWeather(
有效载荷+“,美国”,换算计算单位(临时单位),预测天数;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribowith(新可处置观察员){
@凌驾
public void onNext(字符串未来响应){
Log.d(标签“收到的未来天气:”+未来响应);
parseFutureData(futureResponse、weatherDataList);
weatherInfoPublisher.onNext(weatherDataList);
weatherInfoPublisher.onComplete();
}
@凌驾
公共无效申报人(可丢弃的e){
Log.e(标记“错误为”+e.getMessage());
}
@凌驾
未完成的公共空间(){
}
});
返回信息发布器;
}
这是一个单例类,在中提供了整个实现

它怎么能被推迟到观察者连接到它

不要订阅此方法中可观察到的内容。相反,将可观察到的结果返回给客户机。一旦订阅了可观察对象,就会执行一个请求

下次我在这个对象上调用
onComplete
时,不会调用新观察者的
onNext


请参阅:如果流完成-它永远无法继续,这是一个终端事件。

如何将其延迟到观察者连接到它。
不要使用此方法订阅该观察,而是将该观察返回给客户端。一旦您订阅,就会执行一个请求<代码>下次我在此对象上调用onComplete时,新观察者的onNext不会被调用。请参阅反应流规范,如果流完成-它将永远无法继续。感谢您的回复。现在我明白了。代码流是正确的,只是我错过了正确的实现。将进行必要的更改并更新线程。如果有效的话,我会要求你给出答案,这样我就可以接受并为他人打分。@azizbekian这种方法很有效。你能把这个评论作为一个答案,这样我就可以标记它了。