1

I have a loop which assigns a candidate ID to a variable, which is used in my background task to retrieve data from the db. But as it is a background task, by the time the task is getting to run, it is only using the last ID:

for (int i=0; i < id_array.length; i++) {
    System.out.println("array");
    System.out.println(id_array[i]);
    candidate_id = id_array[i];
    new BackgroundTask().execute();
}

It is looping correctly (can see from my outputs) but it is the same ID each time when I call candidate_id in the background task. I am using it as part of a URL JSON request:

    class BackgroundTask extends AsyncTask<Void,Void,String> {

    String json="http://[myip]/dan/db/getcandidatedetails.php?candidate_id=";

    @Override
    protected String doInBackground(Void... voids) {

        System.out.println("Candidate ID******" + candidate_id);

        String json_url= json + candidate_id;

        System.out.println("url" + json_url);

...

The candidate ID that it returns is always the last one in the loop.

Any suggestions of how to solve this/a more efficient way of doing this?

azizbekian
  • 60,783
  • 13
  • 169
  • 249
dplatt
  • 79
  • 1
  • 10
  • Possible duplicate of [How can you pass multiple primitive parameters to AsyncTask?](http://stackoverflow.com/questions/12069669/how-can-you-pass-multiple-primitive-parameters-to-asynctask) – Robin Topper Apr 26 '17 at 15:49

1 Answers1

1

You should pass that value as a parameter to your AsyncTask:

public static class MyAsyncTask extends AsyncTask<Integer, Void, String> {

    @Override
    protected String doInBackground(final Integer... integers) {
        final int candidateId = integers[0];
        // do some work here with `candidateId`
        return "some_string";
    }
}

Then when executing AsyncTask:

new MyAsyncTask().execute(candidateId);
azizbekian
  • 60,783
  • 13
  • 169
  • 249