I have a MainActivity
class in my Android project. Inside of it, I have an AsyncTask
to retrieve all the information about my Cars
with a GET
method of my API REST and I want to add them to an ArrayList that I have in my MainActivity
class. Because of that, I wanted to add a ProgressDialog
that finish at the same time that my AsyncTask finish.
I have declared my ProgressDialog on the top of my MainActivity:
private ProgressDialog progressDialog;
And also, my ArrayList
of cars it's defined on the top of my MainActivity
:
ArrayList<Car> cars = new ArrayList<Car>(); //This is the ArrayList that I have on my MainActivity class
Then, I run my AsyncTask
and initialize my ProgressDialog
in the onCreate
method of my MainActivity
class:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(true);
progressDialog.setMax(100);
new chargeCars().execute();
}
And here it's my AsyncTask:
class chargeCars extends AsyncTask<Void, Integer, Boolean> {
protected void onPreExecute(){
progressDialog.setProgress(0);
progressDialog.show();
}
protected Boolean doInBackground(Void... params) {
//Here all the code to get my information from an HTTP Response, the data it's retrieving OK.
//Here there is a for loop to add all the elements to my ArrayList cars.
{
cars.add(new Car(idCar, model));
publishProgress(10);
if(isCancelled())
break;
}
publishProgress(100);
return true;
}
protected void onProgressUpdate(Integer... values){
int progress = values[0].intValue();
progressDialog.setProgress(progress);
}
protected void onPostExecute(boolean c){
if(c)
{
Toast.makeText(MainActivity.this, "Finished task!",
Toast.LENGTH_SHORT).show();
}
if(progressDialog != null && progressDialog.isShowing()){
progressDialog.dismiss();
}
}
protected void onCancelled() {
Toast.makeText(MainActivity.this, "Canceled task",
Toast.LENGTH_SHORT).show();
}
}
The problem it's that the ProgressDialog
never ends, it's always on the screen. Why it is always displaying? Is my AsyncTask always running? Never ends?
Note: The information of my HTTP response it's coming well from my API REST because I put some logs after I retrieve the information and it is correct and apparently it is stored in the ArrayList
(I put some logs too after add the information to my ArrayList
and it gives me the information stored) but when I put cars.size()
after executing my AsyncTask
on the onCreate()
method it gives to me that the size it's equals to 0. It's the reason that I put my ProgressDialog
inside of my AsyncTask
, because I think it maybe didn't finished yet and then I'm secure that the AsyncTask has finished. Could it be the solution? Have I to make another change?
Please bring me light because I'm totally block here.
EDIT: I edited my code.
EIDT 2: With the code updated the ProgressDialog only disappears when I touch the screen of my mobile phone. In other cases it doesn't disappear.
Thanks in advance!
In your onPostExecute add,