変数が保存されるクラスの新しいインスタンスを毎回作成し、BaseAdapter として拡張された独自のアダプターからそれらをロードできるようにすることで、ListView にエントリをロードする 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[])
アプリがクラッシュしてバックグラウンド スレッドから ListView が変更されることがあるため、特にcustomAdapter.notifyDataSetChanged();
が実行されることが重要です。onPostExecute
onProgressUpdate
PictureResults をタイプとして使用できないのはなぜですか?
ところで:これは私がAsyncTaskを実行する方法です:
Long hey = (long) 1;
new getPictureDataTask().execute(hey);