我有我的MainActivity的AsynkTask方法,它是以下幾點:如何從我的AsyncTask中返回一個ArrayList?
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
這是我在另一個Class
已經宣佈,它是其構造方法的對象:
public Car(int idCar, String name)
{
this.idCar = idCar;
this.name = name;
}
,我知道, return cars;
返回ArrayList
名爲cars
的方法onPostExecute
,但我試圖從那裏檢索這個ArrayList
,我不能,因爲它總是對我說onPostExecute
方法必須是Void
。
我還另外ArrayList
我MainActivity
類中聲明:
ArrayList<Car> totalCars = new ArrayList<Car>();
所以我嘗試它的克隆cars
的ArrayList到我totalCars
的ArrayList在我onPostExecute
方法,但它給了我在上面說的錯誤:
0123訪問'的clone()' 已在保護 'java.lang.Object繼承'
這是試圖克隆我的ArrayList代碼:
protected void onPostExecute(ArrayList<Car> c)
{
for(Car cr: c)
{
totalCars.add(cr.clone());
}
}
所以我也試圖直接添加我的價值觀我totalCars
的ArrayList在我doInBackground
方法:
totalCars.add(new Car(1,"Car1");
totalCars.add(new Car(2,"Car2");
totalCars.add(new Car(3,"Car3");
但是當我執行我AsyncTask
方法:
new chargeCars().execute();
我的大小totalCars
ArrayList它等於0.
我該怎麼辦?我完全封鎖了,我搜索了一個答案,但是我找不到任何對我有幫助的東西。
編輯:我Car
類是:
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;
}
}
編輯2:我把一些日誌,看看究竟是什麼我的計劃,我得到了奇怪的結果:
正如Clairvoyant
說,我使用他的兩種方法,但其中任何一種都有效。我能看到什麼?那麼,我看到在onPostExecute
方法中,ArrayList包含兩個方法中的值。這裏沒有問題。
那就是當我在方法執行的AsyncTask我MainActivity
類的onCreate
,我的ArrayList totalCars
沒有任何價值裏面,但在我的AsyncTask的方法onPostExecute
它,我把裏面的所有值的問題ArrayList。
可能是什麼問題?
編輯3:我也試圖與:
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){
}
}
}
但仍然無法正常工作。我也試圖使ProgressDialog
是安全的,我的AsyncTask,它的完成,當我嘗試使用我的Log
在我onCreate
方法,但它也給了我一個錯誤(我有一個問題在SO這件事,但是我不知道這是否是這是一個很好的做法,可以直接引用另一個問題,所以我不在這裏發表)。
我做錯了什麼?爲什麼我的doInBackground
它給我的ArrayList
正確size
和我onCreate
方法呢?
在此先感謝!
只是申報「的ArrayList車」你asynTask外面,然後添加你的汽車沒有返回任何東西。 –
AnixPasBesoin
@AnixPasBesoin我有我的ArrayList'totalCars'我的AsyncTask外,當我不回任何東西,直接添加的對象,它也不起作用。 –
你有沒有調試你的代碼? – Pankaj