Nano Hash - криптовалюты, майнинг, программирование

Нужно ли нам перехватывать возвращаемое значение AsyncTask?

Я написал асинхронную задачу ниже

   public class DownloadTask extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... urls) {
            String result = "";
            HttpsURLConnection urlConnection = null;
            try {
                URL url = new URL(urls[0]);
                urlConnection = (HttpsURLConnection)url.openConnection();
                InputStream inputStream = urlConnection.getInputStream();
                InputStreamReader reader = new InputStreamReader(inputStream);
                int data = reader.read();
                while (data != -1){
                    char currentData = (char)data;
                    result+=currentData;
                    data = reader.read();
                }
                Log.i("Downloaded data",result);
            }catch (Exception e){
                e.printStackTrace();
            }

            return result;
        }
    }

Здесь AsyncTask возвращает значение string. В методе onCreate я назвал объект этой AsyncTask

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView);
        titles = new ArrayList<String>();
        arrayAdapter =new ArrayAdapter(MainActivity.this,android.R.layout.simple_list_item_1,titles);
        listView.setAdapter(arrayAdapter);
        //To get json data
        DownloadTask task  = new DownloadTask();
        try {
            task.execute("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty");
        }catch (Exception e){
            e.printStackTrace();
        }

    }

Этот код работает без ошибок. Но я сомневаюсь, что нам не нужна переменная типа string, чтобы перехватывать возвращаемое значение AsyncTask. Здесь переменная не используется и просто записывается как task.execute("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty");. Почему это не вызывает ошибку. Кто-нибудь может объяснить. Я новичок в Android.


  • @user:10819573 не могли бы вы изучить это? 16.04.2020

Ответы:


1

Возвращаемое значение AsyncTask.execute(Params... params) — это сама задача, как указано в документация, чтобы вы могли сохранить ссылку на нее. Если вы просто проигнорируете возвращаемое значение, это не приведет к ошибке.

AsyncTask работает асинхронно. Вот почему вы получаете результат позже в методе onPostExecute(Result result) метода AsyncTask. Этот метод запускается в потоке пользовательского интерфейса, поэтому вы можете обновлять представления и т. Д. Там.

16.04.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..