Add threads in awaited for loops. Remove new threads from Requestor.getObject calls

This commit is contained in:
Clayton Wilson 2020-10-25 16:53:51 -04:00
parent 6b30476ccd
commit c07599ecc6
3 changed files with 64 additions and 29 deletions

View File

@ -88,22 +88,50 @@ public class ItemDetails extends AppCompatActivity implements ListPickerDialogFr
Requestor requestor = new Requestor(am, configs.getProperty("apiKey"));
SynchronousReceiver<Integer[]> listIdsReceiver = new SynchronousReceiver<>();
SynchronousReceiver<List> 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<List> 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");

View File

@ -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;
}

View File

@ -66,13 +66,7 @@ public class ListsFragment extends Fragment implements CreateListDialogFragment.
SynchronousReceiver<Integer[]> listIdsReceiver = new SynchronousReceiver<>();
final Requestor.Receiver<Integer[]> 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<List> 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<List> 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