From 92517b549df111e44cace7c0094d442420cb244a Mon Sep 17 00:00:00 2001 From: daawaan4U Date: Thu, 30 May 2024 02:02:29 +0800 Subject: [PATCH] Implement swing workers for fetching weather data --- .../edu/project/services/WeatherService.java | 59 +++++++++++++++---- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/src/main/java/edu/project/services/WeatherService.java b/src/main/java/edu/project/services/WeatherService.java index a922d32..b6554c2 100644 --- a/src/main/java/edu/project/services/WeatherService.java +++ b/src/main/java/edu/project/services/WeatherService.java @@ -1,24 +1,59 @@ package edu.project.services; +import java.io.IOException; + +import javax.swing.SwingWorker; + import edu.project.Context; import edu.project.api.WeatherCurrentData; import edu.project.api.WeatherForecast5Data; +/** + * Service for handling weather data changes + */ public class WeatherService { public WeatherService(Context context) { + + // Register listener for location changes context.store.addLocationListener(position -> { - try { - double lat = position.getLatitude(); - double lon = position.getLongitude(); - - WeatherCurrentData currentData = context.weatherApi.getCurrentWeather(lat, lon); - WeatherForecast5Data forecastData = context.weatherApi.getWeatherForecast(lat, lon); - - context.store.setWeatherCurrentData(currentData); - context.store.setWeatherForecast5Data(forecastData); - } catch (Exception e) { - e.printStackTrace(); - } + double lat = position.getLatitude(); + double lon = position.getLongitude(); + + // Fetch weather current data from worker thread + new SwingWorker() { + @Override + protected WeatherCurrentData doInBackground() throws IOException { + return context.weatherApi.getCurrentWeather(lat, lon); + } + + @Override + protected void done() { + try { + context.store.setWeatherCurrentData(get()); + } catch (Exception exception) { + exception.printStackTrace(); + } + + } + }.execute(); + + // Fetch weather forecast data from worker thread + new SwingWorker() { + @Override + protected WeatherForecast5Data doInBackground() throws IOException { + return context.weatherApi.getWeatherForecast(lat, lon); + } + + @Override + protected void done() { + try { + context.store.setWeatherForecast5Data(get()); + } catch (Exception exception) { + exception.printStackTrace(); + } + + } + }.execute(); }); } }