0
我正在開發一個Andoid天氣應用程序並遇到問題。在抽屜中,我有幾個城市,當我選擇其中一個Presenter方法成功請求調用視圖方法updateWeather ...之後,如果調用error - showError。但問題是,當我得到一個城市(一個片段)的天氣,而我從抽屜中選擇另一個片段(另一個城市)時,查看方法updateWeather或showError多次調用(準確地說 - 多次我切換片段)。複製每個主持人呼叫的片段方法
在onActivityCReated我調用方法presenter.getWeather()
演示有此代碼
void getWeather() {
Log.i("WeatherPresenter", "StartLoading");
getViewState().showLoading();
dataSubscription = repository.getWeatherData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(next -> {
Log.i("LoadWeather", "Success");
getViewState().hideLoading();
getViewState().updateWeatherCurrent(next.getWeatherResponse());
getViewState().updateWeatherHourly(next.getWeatherForecastHourlyResponse());
getViewState().updateWeatherDaily(next.getWeatherForecastDailyResponse());
getViewState().updateLastUpdateTime(dateFormat.format(new Date(next.getUpdatedTime())));
},
error -> {
getViewState().hideLoading();
Log.e("Error", error.getMessage());
getViewState().showError();
});
}
從日誌是否發生錯誤的方法getViewState()showError();只叫一次。但在片段中,它會多次調用,因爲我正在切換片段。
這是記錄 - 要明白我的意思
08-08 16:35:42.738 31682-31682/dvinc.yamblzhomeproject E/WeatherFragment: Error Shown
08-08 16:35:42.913 31682-31682/dvinc.yamblzhomeproject E/Error: Unable to resolve host "api.openweathermap.org": No address associated with hostname
08-08 16:35:42.914 31682-31682/dvinc.yamblzhomeproject E/WeatherFragment: Error Shown
在演講我從要求退訂
@Override
public void detachView(WeatherView view) {
super.detachView(view);
Log.i("WeatherPresenter", "DetachView");
if (dataSubscription != null) {
dataSubscription.dispose();
}
}
這也是我如何切換片段
@Override
public void showFragment(Fragment fragment) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentContainer, fragment)
.commit();
}
這裏是如何我從主要演示者(負責導航)調用此方法
void openWeatherFragment(CityEntity cityEntity) {
menuActiveCity = menuRepository.setActiveCity(cityEntity)
.subscribeOn(Schedulers.io())
.subscribe();
getViewState().showFragment(WeatherFragment.newInstanse(cityEntity.getCityTitle()));
}