Хобрук: Ваш путь к мастерству в программировании

Android ProgressDialog перестает вращаться до завершения задачи

Я использую диалоговое окно прогресса в своем классе Asynctask для метода onpreExecte() и закрываю диалоговое окно в onPostExecute, пока Google создает маршруты карты. Моя проблема в том, что колесо в диалоговом окне останавливается через 2-3 секунды, но мой фоновый процесс все еще работает.

    private class ParserTask extends
            AsyncTask<String, Integer, List<List<HashMap<String, String>>>> {

   @Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(MapaViagem.this);
        // setup your dialog here
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.setTitle("Traçando Rotas");
        dialog.setMessage("Aguarde...");
        dialog.setCancelable(false);
        dialog.show();

    }

        @Override
        protected List<List<HashMap<String, String>>> doInBackground(
                String... jsonData) {


            JSONObject jObject;
            List<List<HashMap<String, String>>> routes = null;

            try {
                jObject = new JSONObject(jsonData[0]);
                PathJSONParser parser = new PathJSONParser();
                routes = parser.parse(jObject);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return routes;
        }

        @Override
        protected void onPostExecute(List<List<HashMap<String, String>>> routes) {
            ArrayList<LatLng> points = null;
            PolylineOptions polyLineOptions = null;

            // traversing through routes
            for (int i = 0; i < routes.size(); i++) {
                points = new ArrayList<LatLng>();
                polyLineOptions = new PolylineOptions();
                List<HashMap<String, String>> path = routes.get(i);

                for (int j = 0; j < path.size(); j++) {
                    HashMap<String, String> point = path.get(j);

                    double lat = Double.parseDouble(point.get("lat"));
                    double lng = Double.parseDouble(point.get("lng"));
                    LatLng position = new LatLng(lat, lng);

                    points.add(position);
                }

                polyLineOptions.addAll(points);
                polyLineOptions.width(4);
                polyLineOptions.color(Color.BLUE);
            }

            googleMap.addPolyline(polyLineOptions);
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    }

  • Извините, но вы запускаете задачу внутри задачи? зачем вам это? 09.12.2014
  • @TheRedFox извините, я отредактировал вопрос 09.12.2014
  • как узнать, что задача все еще выполняется? Вы можете быть более конкретным? 09.12.2014
  • @TheRedFox Я новичок в разработке для Android, я действительно не знаю, выполняется ли задача, я говорю об этом, потому что, когда задача запускается, счетчик вращается и внезапно останавливается, затем через 2 или 3 секунды диалоговое окно исчезает показывая мне маршруты 09.12.2014
  • добавить журнал Log.i(TAG,MSG) перед dialog.dismiss();, если этот журнал появляется в logcat, затем диалоговое окно удаляется, затем задача завершается и работает, как ожидалось, ЕСЛИ карта все еще загружается, то это проблема подключения, эта карта загружается с сервера , и это не имеет отношения к задаче. 09.12.2014

Ответы:


1

Вы должны поместить весь «обрабатывающий» код внутрь doInBackground, то есть весь код, который у вас есть внутри onPostExcecute. Только то, что изменяет пользовательский интерфейс, должно быть в onPostExcecute (например, показывать сообщение пользователю, изменять текст TextView и т. д.), иначе ваш пользовательский интерфейс застрянет. У меня была такая же проблема, и я решил ее таким образом.

Надеюсь, поможет

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

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..