Comment puis-je retourner une liste de tableaux de mon AsyncTask?

J'ai un AsynkTask méthode sur mon MainActivity que c'est le suivant:

class chargeCars extends AsyncTask<Void, Integer, ArrayList<Car>> {
        protected void onPreExecute(){
        }
        protected ArrayList<Car> doInBackground(Void... params) {

            ArrayList<Car> cars = new ArrayList<Car>();

            cars.add(new Car(1,"Car1");
            cars.add(new Car(2,"Car2");
            cars.add(new Car(3,"Car3");

            return cars;
        }

        protected void onProgressUpdate(){
        }

        protected void onPostExecute(ArrayList<Car> c){

        }
    }

Car c'est un objet que j'ai déclaré dans une autre Class et quel constructeur, c'est:

public Car(int idCar, String name)
{
    this.idCar = idCar;
    this.name = name;
}

et je sais que return cars; renvoie la ArrayList nommé cars à la méthode onPostExecute mais j'ai essayé de récupérer ce ArrayList à partir de là, et je ne pouvais pas car il me dit toujours qu' onPostExecute méthode doivent être Void.

J'ai aussi un autre ArrayList déclaré, dans ma MainActivity classe:

ArrayList<Car> totalCars = new ArrayList<Car>();

donc ce que j'ai essayé de cloner cars ArrayList dans mon totalCars ArrayList dans mon onPostExecute méthode, mais il me donne une erreur dans lequel il est dit que:

"clone ()" a protégé l'accès en java.lang.L'objet'

Ici c'est le code d'essayer de cloner mon ArrayList:

protected void onPostExecute(ArrayList<Car> c)
{
    for(Car cr: c)
    {
        totalCars.add(cr.clone());
    }
}

Donc, j'ai aussi essayé d'ajouter mes valeurs directement à mon totalCars liste de tableaux sur mon doInBackground méthode:

totalCars.add(new Car(1,"Car1");
totalCars.add(new Car(2,"Car2");
totalCars.add(new Car(3,"Car3");

mais quand j'execute mon AsyncTask méthode:

new chargeCars().execute();

la taille de mon totalCars ArrayList il est égal à 0.

Que dois-je faire? Je suis totalement bloquer et j'ai cherché dans la une réponse, mais je ne pouvais pas trouver quelque chose qui contribue à moi.

EDIT: Mon Car Classe c'est:

public class Car {

    private int idCar;
    private String name;

    public Car(){};

    public Car(int idCar, String name)
    {
        this.idCar = idCar;
        this.name = name;
    }

    public void setIdCar(int idCar)
    {
         this.idCar = idCar;
    }

    public int getIdCar()
    {
        return idCar;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }
}

EDIT 2: j'ai mis quelques journaux pour voir exactement ce que fait mon programme et j'ai obtenu des résultats étranges:

Comme Clairvoyant dit, j'utilise deux de ses méthodes, mais aucun d'entre eux fonctionne. Que pouvais-je vu? Eh bien, j'ai vu que dans le onPostExecute méthode de l'ArrayList contient les valeurs dans les deux méthodes. Ici, il n'y a pas de problème.

Le problème c'est que lorsque j'exécute les AsyncTask dans la méthode onCreate de mon MainActivity classe, mon ArrayList totalCars n'ont pas de valeur à l'intérieur, mais dans la méthode onPostExecute de mon AsyncTask il dispose de toutes les valeurs que j'ai mis à l'intérieur de la liste de tableaux.

Quel pourrait être le problème?

EDIT 3: j'ai aussi essayé avec:

public class MainActivity extends ActionBarActivity {

   ArrayList<Car> cars = new ArrayList<Car>();

   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new chargeCars().execute();
    Log.d("Size onCreate: ", "" + cars.size()); //It returns me a 0 -->Incorrect
   }

   class chargeCars extends AsyncTask<Void, Integer, Boolean> {
        protected void onPreExecute(){
        }

        protected ArrayList<Car> doInBackground(Void... params) {

            cars.add(new Car(1,"Car1");
            cars.add(new Car(2,"Car2");
            cars.add(new Car(3,"Car3");

            Log.d("Size: ", "" + cars.size()); //It gives me the size equals to 3 -->Correct 
            return true;

        }

        protected void onProgressUpdate(){
        }

        protected void onPostExecute(boolean c){

        }
    }
}

Mais ne fonctionne toujours pas. J'ai également essayé de faire une ProgressDialog pour être sûr que mon AsyncTask c'est fini, quand j'essaie d'utiliser mon Log dans mon onCreate méthode, mais il me donne un message d'erreur (j'ai une autre question dans ce sujet mais je ne sais pas si c'est une bonne pratique de SORTE à faire directement référence à une autre question si je ne poste pas ici).

Je fais quelque chose de mal? Pourquoi, dans mon doInBackground il me donne la bonne size de la ArrayList et dans mon onCreate méthode non?

Merci d'avance!

il suffit de déclarer la "ArrayList<Voiture> voitures" à l'extérieur de votre asynTask, puis ajoutez vos voitures sans retourner quoi que ce soit.
J'ai ma liste de tableaux totalCars à l'extérieur de mon AsyncTask et quand je n'ai rien retourner et ajouter les objets directement à elle, il ne fonctionnera pas non plus.
Avez-vous déboguer votre code???
J'ai mis quelques journaux après l'exécution de mon AsyncTask pour voir ce que ça donne pour moi.
J'ai édité ma question avec les résultats que j'ai vu avec vos méthodes. Quel pourrait être le problème?

OriginalL'auteur Francisco Romero | 2015-06-09