我有一个 AsyncTask 通过每次创建一个类的新实例来加载 ListView 中的条目,其中将保存变量并让它们从扩展为 BaseAdapter 的自己的适配器加载。
该类如下所示:
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();
将在其中执行,onPostExecute
因为onProgressUpdate
有时我的应用程序崩溃导致从后台线程更改 ListView。
为什么我不能使用 PictureResults 作为类型???
顺便说一句:这就是我执行 AsyncTask 的方式:
Long hey = (long) 1;
new getPictureDataTask().execute(hey);