Вопрос по android-asynctask, android – Может ли метод OnPostExcecute в значениях AsyncTask ВОЗВРАТИТЬ?

7

Я разрабатываю приложение для Android, которое требует использованияAsyncTask для подключения к сети. Я назвал это из основного потока. ИтакdoInBackground метод выполняется, а затем возвращается кonPostExecute метод. После выполнения метода onPostExecute я хочу вернуть значение обратно в операцию, из которой оно было вызвано, так же, как и в какую-то операцию в этой конкретной операции, для которой требуется значение, возвращаемое методом onPostExecute. Как мне это решить? Как вернуть значение из onPostExecute?

Заранее спасибо

See this answer Adil Soomro

Ваш Ответ

3   ответа
1

ности, затем объявите любое значение, которое вы хотите вернуть, как глобальное. Это было полезным для вас?

5

AsyncTask

public class MainActivity extends Activity {
    public String retunnumfromAsyncTask;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layouttest);
        new Asyntask(this).execute();
    }

    public class Asyntask extends AsyncTask<Void, Void, String> {
        private final Context Asyntaskcontext;

        public Asyntask(Context context){
            Asyntaskcontext = context;
        }

        @Override
        protected void onPostExecute(String result) {
            MainActivity mainactivity = (MainActivity) Asyntaskcontext;
            mainactivity.retunnumfromAsyncTask = result;       
            super.onPostExecute(result);
        }
    }
}
8

как указано в его названии, работает асинхронно с потоком пользовательского интерфейса, метод onPostExecute будет вызван в некоторый момент в будущем, когда завершится doInBackground. Мы не заботимся о том, когда будет вызван метод onPostExecute (на самом деле, нет никакого способа узнать это во время сборки проекта), единственное, что нам нужно, это то, что метод onPostExecute гарантированно будет вызван соответствующим базовым фреймворком в будущем. Таким образом, целью метода onPostExecute является обработка результата, возвращаемого из рабочего потока, поэтому также единственным аргументом метода onPostExecute является результат, возвращаемый методом doInBackground.

I have to some operation in that particular activity which requires the value returned from onPostExecute method. How do I solve this?

Конечно, вы можете создать некоторые переменные экземпляра (или использовать шаблон listerner) в классе Activity, чтобы сохранить результат при возврате и готовности в методе onPostExecute. Проблема в том, что вы никогда не знаете, когда этот результат будет готов вне метода onPostExecute во время сборки проекта, как это фактически определяется во время выполнения приложения. Если вы не напишите какой-либо механизм ожидания, непрерывно опрашивающий результат, который в результате жертвует преимуществами , например, встроенным API.get () что заставляет работать синхронно с потоком пользовательского интерфейса и возвращать результат в Activity.

Рекомендуется изменить дизайн и переместить код операции, для которого требуется результат, возвращаемый из , в метод onPostExecute. надеюсь это поможет.

Error: User Rate Limit Exceededat hereError: User Rate Limit Exceeded

Похожие вопросы