У меня есть AsyncTask для загрузки записей в 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[])
Важно, чтобы особенно customAdapter.notifyDataSetChanged();
был выполнен в onPostExecute
, потому что в onProgressUpdate
иногда происходит сбой приложения, вызывающий изменение ListView из фонового потока.
Почему я не могу использовать PictureResults как тип ???
BTW: Это, как я исполняю AsyncTask:
Long hey = (long) 1;
new getPictureDataTask().execute(hey);
при расширении AsyncTask <1,2,3>, 3 относится к doInBackground возврата объекта, так что вы должны изменить что из Пустоты в PictureResults. –