2013-05-20 2 views
0

У меня есть 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); 
+0

при расширении AsyncTask <1,2,3>, 3 относится к doInBackground возврата объекта, так что вы должны изменить что из Пустоты в PictureResults. –

ответ

1

Параметр третьего типа AsyncTask должен быть PictureResults не Void

class getPictureDataTask extends AsyncTask<Long, String, PictureResults> 

Поскольку третий тип Параметр AsyncTask это то, что должно быть возвращен вид результата данных. Если вы не хотите возвращать любой результат от doInBackground(), используйте Void и затем return null;

+0

Большое спасибо: D – TestSubject

0

Вы должны изменить это AsyncTask

+0

Вы имеете в виду «это» в моем классе? И как мне изменить его, что мой класс будет работать? – TestSubject

+0

Извините, я не вставлял эту часть. Я имею в виду voidwith AsyncTask вроде этого – nedaRM

0

, когда вы хотите вернуть PictureResults, вы должны быть объявить в AsyncTask.

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

Посмотри на 3 параметрах в угловых скобках, вы реализуете свой AsyncTask.

AsyncTask<Params, Progress, Result> 

В Params, это взять на doInBackground() метод, который вы проходя его при запуске задачи с преобразованием приложений();
Результат должен быть возвращен методом doInBackground() и будет приниматься методом onPostExecute (Result ret).
Каждый должен иметь тот тип, который вы определили, когда вы реализуете свой собственный класс задач.
Дополнительная информация here.

Смежные вопросы