postExecute () не может вернуть значение, потому что, к кому или к чему оно вернется?Ваш оригинальный метод, который вызвал AsyncTask, исчез, потому что AsyncTask работает в фоновом режиме.Это асинхронный смысл, когда AsyncTask.execute () возвращает, что он все еще работает в фоновом режиме, и, следовательно, postExecute () не может вернуть значение, потому что ему нечего возвращать.
Вместо этого AsyncTask нуждается в ссылке наваша активность или какой-либо другой объект, чтобы он мог опубликовать ваши значения обратно к нему.В вашем коде не может быть строк после вызова execute (), потому что ваша задача еще не завершена.Вместо этого вы должны создать метод с именем updateSymbol (currentPrice, процентChange), переместить туда весь этот код ниже execute (), и в вашей AsyncTask вы должны передать ссылку на Activity.Затем вызовите updateSymbol (currentPrice ,centChange) из метода onPostExecute ().
Но будьте осторожны, если у вас есть ссылка на Activity, она может быть уничтожена во время работы doInBackground () и когда postExecute () запускает его, должен просто отбрасывать результаты или не пытаться обновить пользовательский интерфейс.Например, пользователь поворачивает свой телефон, вызывая уничтожение Действия.Я считаю, что лучше всего хранить ссылку на AsyncTask в действии, чтобы он мог отменить () его, если действие будет уничтожено.Вы можете вызвать AsyncTask.cancel (), а затем проверить, была ли ваша задача отменена, например:
public void postExecute( String result ) {
if( !isCanceled() ) {
// do your updating here
activity.setSymbol( result );
}
}
Создать базовый класс для всех операций действительно легко, поэтому вы можете легко отслеживать выполнение AsyncTasks:
public class BaseActivity extends Activity {
List<AsyncTask> runningTasks;
public void onStop() {
for( AsyncTask task : runningTasks ) {
task.cancel(true);
}
}
public AsyncTask start( AsyncTask task ) {
runningTasks.add( task );
return task;
}
public void done( AsyncTask task ) {
runningTasks.remove( task );
}
}
Несколько быстрых указателей.Вам не нужно выполнять (новая строка [] {"бла" + бла}).Varargs в Java позволяют вам сделать это.выполнить ("бла" + бла).Вы также ловите исключения и продолжаете, фактически не обрабатывая их.Будет трудно, когда что-то действительно произойдет, потому что ваше приложение ловит их и просто продолжает, как будто ничего не произошло.Если вы получили сообщение об ошибке, вы можете захотеть оставить отзыв и прекратить попытки выполнить этот процесс.Остановитесь, покажите ошибку пользователю, и пусть он сделает следующее.Переместите блоки catch в конец методов.