2013-05-20 24 views
0

我有一個AsyncTask來加載ListView中的條目,每次創建一個類的新實例,其中varibles將被保存並讓它們從一個擴展自己的Adapter中加載作爲BaseAdapter。AsyncTask不會讓我使用我自己的類

類看起來是這樣的:

public class PictureResults 
{ 
    private long id; 
    private String pictureURL; 

    public void setId(long id) 
    { 
     this.id = id; 
    } 

    public long getId() 
    { 
     return id; 
    } 

    public void setPictureURL(String pictureURL) 
    { 
     this.pictureURL = pictureURL; 
    } 

    public String getPictureURL() 
    { 
     return pictureURL; 
    } 
} 

這是我的AsyncTask類:

private class getPictureDataTask extends AsyncTask<Long, String, Void> 
    { 
     protected PictureResults doInBackground(Long... param) 
     { 
       PictureResults pr; 

       pr = new PictureResults(); 
       pr.setId(param[0]); 
       pr.setPictureURL("http://www.myurl.com"); 

       return pr; 
     } 

     protected void onProgressUpdate(String... response) 
     { 
      //do nothing 
     } 

     protected void onPostExecute(PictureResults ret) 
     { 
      picResults.add(ret); //picResults is an ArrayList<PictureResults> 
      ret.loadPicture(customAdapter); 
      customAdapter.notifyDataSetChanged(); 
     } 
    } 

出現的主要問題是,Eclipse的讓我瞭解以下內容:

The return type is incompatible with AsyncTask<Long,String,Void>.doInBackground(Long[]) 

尤其重要的是customAdapter.notifyDataSetChanged();將在執行,因爲在onProgressUpdate有時我的應用程序崩潰導致從後臺線程更改ListView。

爲什麼我不能使用PictureResults作爲類型?

BTW:我這是怎麼執行的AsyncTask:

Long hey = (long) 1; 
new getPictureDataTask().execute(hey); 
+0

當你擴展的AsyncTask <1,2,3>,3是指doInBackground返回的對象,所以你應該改變,從虛空到PictureResults。 –

回答

1

AsyncTask第三類參數應該是PictureResultsVoid

class getPictureDataTask extends AsyncTask<Long, String, PictureResults> 

由於AsyncTask第三個參數類型是什麼,應返回類型的數據的結果。如果你不想從doInBackground()返回任何結果,使用Void然後return null;

+0

非常感謝:D – TestSubject

0

當你想要返回PictureResults你應該改變這的AsyncTask

+0

你是說我班上的「這個」嗎?我該如何改變它,讓我的班級工作? – TestSubject

+0

對不起,我沒有粘貼這部分。我的意思是使用AsyncTask 這樣的無效 – nedaRM

0

,你應該在的AsyncTask聲明。

private class getPictureDataTask extends AsyncTask<Long, String, PictureResults> 
{ 
    ...... 
} 
0

看看在尖括號中的3個參數,而你實現你的AsyncTask。

AsyncTask<Params, Progress, Result> 

該參數是由您在使用excute()開始任務時傳遞它的doInBackground()方法執行的。
結果應該由doInBackground()方法返回,並由方法onPostExecute(Result ret)進行。
每個應該是您實現自定義任務類時定義的類型。
更多的信息是here

0

你應該你的AsyncTask改變的AsyncTask

相關問題