From 8fbceb083c9a7fca513812f04797ba903c8367b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20S=C3=A1nchez?= Date: Thu, 12 Dec 2024 12:46:04 -0300 Subject: [PATCH] Concurrent ticker fetching --- .../dcav2gui/ui/home/HomeFragment.java | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/example/dcav2gui/ui/home/HomeFragment.java b/app/src/main/java/com/example/dcav2gui/ui/home/HomeFragment.java index a416252..2718d27 100644 --- a/app/src/main/java/com/example/dcav2gui/ui/home/HomeFragment.java +++ b/app/src/main/java/com/example/dcav2gui/ui/home/HomeFragment.java @@ -21,6 +21,7 @@ import com.example.dcav2gui.R; import com.example.dcav2gui.TickerTracker; import java.util.Locale; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -254,13 +255,46 @@ public class HomeFragment extends Fragment { String ticker2 = "ETHUSDT"; String ticker3 = "USDTARS"; - TickerTracker.PriceChangeData priceData = TickerTracker.getPriceChanges(ticker1); - TickerTracker.PriceChangeData priceData2 = TickerTracker.getPriceChanges(ticker2); - TickerTracker.PriceChangeData priceData3 = TickerTracker.getPriceChanges(ticker3); + // Fetch price data in background using CompletableFuture + CompletableFuture future1 = CompletableFuture.supplyAsync(() -> { + try { + return TickerTracker.getPriceChanges(ticker1); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + }); + + CompletableFuture future2 = CompletableFuture.supplyAsync(() -> { + try { + return TickerTracker.getPriceChanges(ticker2); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + }); + + CompletableFuture future3 = CompletableFuture.supplyAsync(() -> { + try { + return TickerTracker.getPriceChanges(ticker3); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + }); + + // Wait for all futures to complete + CompletableFuture allFutures = CompletableFuture.allOf(future1, future2, future3); + + // Update UI on the main thread requireActivity().runOnUiThread(() -> { try { + TickerTracker.PriceChangeData priceData = future1.get(); + TickerTracker.PriceChangeData priceData2 = future2.get(); + TickerTracker.PriceChangeData priceData3 = future3.get();; + pricePair1.setText(String.format(Locale.ROOT,"%.2f", priceData.getCurrentPrice())); setPercentageColor(pricePair124hPercentage,priceData.getPriceChangePercent24h()); setPercentageColor(pricePair17dPercentage,priceData.getPriceChangePercent7d()); @@ -280,7 +314,7 @@ public class HomeFragment extends Fragment { Toast.makeText(getContext(), "Error updating UI", Toast.LENGTH_SHORT).show(); } }); - } catch (IOException e) { + } catch (Exception e) { requireActivity().runOnUiThread(() -> Toast.makeText(getContext(), "Failed to fetch price data. Check your connection.", Toast.LENGTH_SHORT).show() );