diff --git a/app/lib/main.dart b/app/lib/main.dart index 506c846b8a8c16abc209e8883f05e57c1e5c5997..5bce45213d8ec5a75387d38279491c1a69d78904 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -11,7 +11,7 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return const MaterialApp( - home: const DefaultPage(), + home: DefaultPage(), ); } } diff --git a/app/lib/pages/marker_handler/get_markers.dart b/app/lib/pages/marker_handler/get_markers.dart index cb448d914fd67a9a305e3064384b1b0de0eacd54..702d41458a19f878d878bf46469e20481ed4db8d 100644 --- a/app/lib/pages/marker_handler/get_markers.dart +++ b/app/lib/pages/marker_handler/get_markers.dart @@ -12,24 +12,31 @@ Future<List<Measurement>> fetchMarkerData() async { ..badCertificateCallback = // NB: temporary disable SSL certificate validation (X509Certificate cert, String host, int port) => true; - // Request makers from API and wait for response + // Request markers from API var request = await client.getUrl(Uri.parse(serverURI + mapEndpoint)); - var response = await request.close(); + var response = await request.close(); // Close response body at end of function - // Attempt to parse json if request is ok + // Parse body to JSON if request is ok if (response.statusCode == 200) { var responseBody = await response.transform(utf8.decoder).join(); - List<dynamic> jsonData = json.decode(responseBody); - - return jsonData.map((data) => Measurement.Measurement(data)).toList(); + if (responseBody.isNotEmpty) { + var jsonData = json.decode(responseBody); + if (jsonData != null && jsonData is List) { // Check if jsonData is not null and is a List + return jsonData.map((data) => Measurement.Measurement(data)).toList(); + } else { + throw Exception('Failed to parse marker data: Unexpected response format'); + } + } else { + throw Exception('Failed to parse marker data: Empty response body'); + } } else { - print('Request failed with status: ${response.statusCode}'); - throw Exception('failed to parse marker data'); + throw Exception('Failed to fetch marker data: Status code ${response.statusCode}'); } } catch (e) { - print('Request failed with error ${e}'); - throw Exception('failed to connect to the server. Please check your network connection: ${e}'); + print('Error fetching marker data: $e'); + throw Exception('Failed to fetch marker data: ${e.toString()}'); } } + diff --git a/app/lib/pages/marker_handler/marker_data.dart b/app/lib/pages/marker_handler/marker_data.dart index e6a86af121a8ab9291d54cb7ba081c0846ab4f6e..2fcc887a9d9c938426f4806c7f89336caecaec6a 100644 --- a/app/lib/pages/marker_handler/marker_data.dart +++ b/app/lib/pages/marker_handler/marker_data.dart @@ -25,10 +25,19 @@ class Measurement { dataList: (json['Data'] as List<dynamic>) .map((data) => Data.fromJson(data)) .toList(), - cornerList: (json['Corner'] as List<dynamic>) + cornerList: (json['Corners'] as List<dynamic>) .map((data) => Corner.fromJson(data)) .toList(), bodyOfWater: json['WaterBodyName'], + /* + dataList: (json['Data'] != null && json['Data'] is List) + ? (json['Data'] as List<dynamic>).map((data) => Data.fromJson(data)).toList() + : [], + cornerList: (json['Corner'] != null && json['Corner'] is List) + ? (json['Corner'] as List<dynamic>).map((data) => Corner.fromJson(data)).toList() + : [], + bodyOfWater: json['WaterBodyName'] ?? '', + */ ); } } diff --git a/server/APIs/__pycache__/get_weather.cpython-311.pyc b/server/APIs/__pycache__/get_weather.cpython-311.pyc index ab855e0b7f401aed51ed98d992a3903f0e12b059..4efcc88c6050e6cb91118c0e1bb170950b6e7797 100644 Binary files a/server/APIs/__pycache__/get_weather.cpython-311.pyc and b/server/APIs/__pycache__/get_weather.cpython-311.pyc differ diff --git a/server/APIs/get_weather.py b/server/APIs/get_weather.py index 89b9997a94ffd9d012c0ace27371e1f64cf7eebb..37e76451af99392bc03592a8f6b2a96cfa2c682b 100644 --- a/server/APIs/get_weather.py +++ b/server/APIs/get_weather.py @@ -76,9 +76,9 @@ def get_weather(self): weather_data.append(weather_object) break - else: # Add error message if no weather data is found or the request fails - print(f"Request to weather API failed with status code {response.status_code}") #NB: append error message to weather_data + print( + f"Request to weather API failed with status code {response.status_code}") # NB: append error message to weather_data status_code = response.status_code # Set headers diff --git a/server/map/__pycache__/get_markers.cpython-311.pyc b/server/map/__pycache__/get_markers.cpython-311.pyc index d1b483af8869c5a8987667bd35afdf5e83010ab2..33bb9f1fcd90bb46478879bc3fe3c70157a943a6 100644 Binary files a/server/map/__pycache__/get_markers.cpython-311.pyc and b/server/map/__pycache__/get_markers.cpython-311.pyc differ diff --git a/server/map/get_markers.py b/server/map/get_markers.py index 45f8965e5a9779ac3539d375232ff5b5f3dfa8c6..0807fb7b580f6152b7b8950dc0efc96e9bb538d8 100644 --- a/server/map/get_markers.py +++ b/server/map/get_markers.py @@ -38,7 +38,7 @@ def get_all_markers(self, cursor, valid: bool): for row in rows: measurement_id = row[0] - # Create a data object for current row + # Create data object for current row data_object = { 'Latitude': row[3], 'Longitude': row[4], @@ -48,8 +48,9 @@ def get_all_markers(self, cursor, valid: bool): 'Accuracy': row[8] } - # Create a corner object for current row + # Create corner object for current row corner_object = { + 'CornerID': row[11], 'Latitude': row[12], 'Longitude': row[13] }