Ваш код выполняется:
- Создайте запрос для получения данных.
- Return temp = 0.0
- Получите данные с сервера и обновите temp.
Таким образом, при запуске вашего кода будет возвращено значение = 0.0.
Чтобы исправить это, вы можете сделать:
Создать новый интерфейс.IResult.java
public interface IResult {
void onResult(double temp);
}
Обновить метод getTemp:
public static void getTemp(double latitude, double longitude, final IResult callback){
String OPEN_WEATHER_MAP_API = "xxxxxxxxx";
new WeatherManager(OPEN_WEATHER_MAP_API)
.getFiveDayForecastByCoordinates(latitude,longitude,
new WeatherManager.ForecastHandler() {
@Override
public void onReceivedForecast(WeatherManager manager, Forecast forecast) {
// Handle forecast
List<Double> list = new ArrayList<>();
for (int i = 0; i < 5; i++) {
long timestamp = forecast.getTimestampByIndex(i+3);
Weather weatherForTimestamp = forecast.getWeatherForTimestamp(timestamp);
Temperature tempMini = weatherForTimestamp.getTemperature().getMinimum();
double temperatureInCelcius = tempMini.getValue(TemperatureUnit.CELCIUS);
list.add(temperatureInCelcius);
Log.v("Weather", "" +weatherForTimestamp.getWind().getSpeed());
Log.v("Weather", "Température mini : " + " "+ list.get(i));
}
int minIndex = list.indexOf(Collections.min(list));
Log.v("Weather MINI", "Température mini : " + list.get(minIndex));
//Toast.makeText(context, "Température mini: " + list.get(minIndex), Toast.LENGTH_LONG).show();
temp = list.get(minIndex);
Log.v("WeatherClass", temp + "");
callback.onResult(temp);
}
@Override
public void onFailedToReceiveForecast(WeatherManager manager) {
Log.v("TAG", " ERREUR");
temp = -1000000;
callback.onResult(temp);
}
}
);
}
Использовать его
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WeatherClass.getTemp(32.32, 322.3, new IResult() {
@Override
public void onResult(double temp) {
//result here
}
});
}
Обновление : поскольку при первом запуске этот метод возвращает 0.0 перед обновлением temp (шаг 2 возвращает temp, шаг 3 update temp), поэтому вы получите 0.0.При втором запуске этот метод будет возвращать результат первого запуска (поскольку он возвращает temp перед обновлением temp), поэтому вы можете думать, что это правильно (но не так, возвращаемое значение - это данные первого запуска).