2012-04-23 6 views
1

Возвращаемое значение может использоваться только для метода postexecute?Объем возвращаемой переменной в AsyncTask

Когда я вызываю метод doInBackground, я получаю исходный код (String) веб-страницы. Я хочу вернуть этот исходный код в свою основную деятельность, потому что там я классифицирую информацию в исходном коде. Но я думаю, что не могу этого сделать. Можно?

С почтового я могу вернуть его?

+1

Причина, по которой вы не можете вернуть ее, связана с тем, что AsyncTask является асинхронным. Где бы вы сохранили значение, если вы его вернули? Код, который вызвал AsyncTask, должен быть выполнен к настоящему времени, а также ряд других инструкций. – jcxavier

ответ

0

В методе onPostExecute вы можете назначить его переменной-члену в своей деятельности или вызвать с ней какой-либо другой метод в качестве аргумента.

Обновление на комментарий: Вы можете объявить подкласс AsyncTask объявленного в другом файле, но вы не будете иметь возможность манипулировать переменные-члены вмещающей деятельности непосредственно. Однако вы можете определить интерфейс для склеивания своей активности и AsyncTask, определенных в другом месте, и передать ссылку на активность в AsyncTask в конструкторе.

+0

Хорошо! Другое мнение связано с областью действия: у меня может быть расширен расширенный класс AsyncTask в другом файле или он должен быть в одном файле? –

+0

См. Обновленный ответ. – wsanville

+0

_you может назначить его переменной-члену в вашей активности_, ​​проблема здесь в том, что извне метод onPostExecute, вы никогда не знаете, когда эта переменная установлена ​​и готова (определена во время выполнения) при написании кода во время сборки проекта. Я написал подробный [ответ] (http://stackoverflow.com/questions/10115243/after-asynctask-execute-do-x-from-activity/10115881#10115881), объясните это раньше, стоит проверить его. – yorkw

0

Переменные AsyncTask удаляются, когда задача завершена.

Однако, вы можете установить переменный класс выполняющегося класса от onPostExecute:

@Override 
protected void onPostExecute(Integer result) { 
     integerListInExecutingClass = result;     
     super.onPostExecute(result); 
} 

Но этот метод работает только, если вы объявляете AsyncTask в качестве частного класса внутри исполняющего класса.

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