diff --git a/Listify/app/src/main/java/com/example/listify/ItemDetails.java b/Listify/app/src/main/java/com/example/listify/ItemDetails.java index e76f699..89fe980 100644 --- a/Listify/app/src/main/java/com/example/listify/ItemDetails.java +++ b/Listify/app/src/main/java/com/example/listify/ItemDetails.java @@ -88,22 +88,50 @@ public class ItemDetails extends AppCompatActivity implements ListPickerDialogFr Requestor requestor = new Requestor(am, configs.getProperty("apiKey")); SynchronousReceiver listIdsReceiver = new SynchronousReceiver<>(); - SynchronousReceiver listReceiver = new SynchronousReceiver<>(); requestor.getListOfIds(List.class, listIdsReceiver, listIdsReceiver); Thread t = new Thread(new Runnable() { @Override public void run() { + Integer[] listIds = null; try { - Integer[] listIds = listIdsReceiver.await(); - for (int i = 0; i < listIds.length; i++) { - requestor.getObject(Integer.toString(listIds[i]), List.class, listReceiver, listReceiver); - shoppingLists.add(listReceiver.await()); - } + listIds = listIdsReceiver.await(); } catch (Exception e) { e.printStackTrace(); } + // Create threads and add them to a list + Thread[] threads = new Thread[listIds.length]; + List[] results = new List[listIds.length]; + for (int i = 0; i < listIds.length; i++) { + SynchronousReceiver listReceiver = new SynchronousReceiver<>(); + requestor.getObject(Integer.toString(listIds[i]), List.class, listReceiver, listReceiver); + int finalI = i; + Thread l = new Thread(new Runnable() { + @Override + public void run() { + try { + results[finalI] = listReceiver.await(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + threads[i] = l; + l.start(); + } + + // Wait for each thread to finish and add results to shoppingLists + for (int i = 0; i < threads.length; i++) { + try { + threads[i].join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + shoppingLists.add(results[i]); + } + + loadingDialog.cancel(); ListPickerDialogFragment listPickerDialog = new ListPickerDialogFragment(shoppingLists); listPickerDialog.show(getSupportFragmentManager(), "User Lists"); diff --git a/Listify/app/src/main/java/com/example/listify/SearchResults.java b/Listify/app/src/main/java/com/example/listify/SearchResults.java index 6b62c74..18e4671 100644 --- a/Listify/app/src/main/java/com/example/listify/SearchResults.java +++ b/Listify/app/src/main/java/com/example/listify/SearchResults.java @@ -108,14 +108,7 @@ public class SearchResults extends AppCompatActivity implements SortDialogFragme // Clear old search results from the view resultsProductListSorted.clear(); searchResultsListAdapter.notifyDataSetChanged(); - - Thread t = new Thread(new Runnable() { - @Override - public void run() { - doSearch(query); - } - }); - t.start(); + doSearch(query); return false; } diff --git a/Listify/app/src/main/java/com/example/listify/ui/lists/ListsFragment.java b/Listify/app/src/main/java/com/example/listify/ui/lists/ListsFragment.java index 0e1ccbf..cec4674 100644 --- a/Listify/app/src/main/java/com/example/listify/ui/lists/ListsFragment.java +++ b/Listify/app/src/main/java/com/example/listify/ui/lists/ListsFragment.java @@ -66,13 +66,7 @@ public class ListsFragment extends Fragment implements CreateListDialogFragment. SynchronousReceiver listIdsReceiver = new SynchronousReceiver<>(); final Requestor.Receiver recv = this; - Thread t = new Thread(new Runnable() { - @Override - public void run() { - requestor.getListOfIds(List.class, recv, null); - } - }); - t.start(); + requestor.getListOfIds(List.class, recv, null); FloatingActionButton fab = (FloatingActionButton) root.findViewById(R.id.new_list_fab); @@ -144,16 +138,36 @@ public class ListsFragment extends Fragment implements CreateListDialogFragment. @Override public void acceptDelivery(Object delivered) { - SynchronousReceiver listReceiver = new SynchronousReceiver<>(); Integer[] listIds = (Integer[]) delivered; - try { -// Integer[] listIds = listIdsReceiver.await(); - for (int i = 0; i < listIds.length; i++) { - requestor.getObject(Integer.toString(listIds[i]), List.class, listReceiver, listReceiver); - shoppingLists.add(listReceiver.await()); + // Create threads and add them to a list + Thread[] threads = new Thread[listIds.length]; + List[] results = new List[listIds.length]; + for (int i = 0; i < listIds.length; i++) { + SynchronousReceiver listReceiver = new SynchronousReceiver<>(); + requestor.getObject(Integer.toString(listIds[i]), List.class, listReceiver, listReceiver); + int finalI = i; + Thread t = new Thread(new Runnable() { + @Override + public void run() { + try { + results[finalI] = listReceiver.await(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + threads[i] = t; + t.start(); + } + + // Wait for each thread to finish and add results to shoppingLists + for (int i = 0; i < threads.length; i++) { + try { + threads[i].join(); + } catch (InterruptedException e) { + e.printStackTrace(); } - } catch (Exception e) { - e.printStackTrace(); + shoppingLists.add(results[i]); } // Set adapter and display this users lists