7

Вопрос по android-asynctask, android – undefined

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

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

  • 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);
            }
        }
    }
    

  • 1

    Просто напишите класс AsyncTask как внутренний класс для своей деятель

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

  • 8

    AsyncTask

    как указано в его названии, работает асинхронно с потоком пользовательского интерфейса, метод 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. надеюсь это поможет.