Черный экран при попытке закрыть ProgressDialog внутри потока

Первая проблема заключалась в том, что ProgressDialog не отображался. Затем я прочитал, что я должен создать Thread. Я создал тему, и она сработала. Но теперь я не могу закрыть ProgressDialog. Приложение вылетает, экран становится черным.

xGrava.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        final ProgressDialog PD = ProgressDialog.show(NovaOcc.this,"","");
        PD.setContentView(R.layout.ipp_load);
        PD.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
        Thread mThread = new Thread() {
            @Override
            public void run() {
                if (ValidaDados() == true) {
                    if (GravaDados() == true) {
                        xGrava.setVisibility(View.GONE);
                        PD.dismiss();
                    }
                }
            }
        };
        mThread.start();
    }
});
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Итак, чтобы ответить на вопрос, убедитесь, что при вызове любого действия в представлении оно выполняется на «runOnUIThread».

Например, здесь, как только ваш поток завершит «длинную» задачу, вы можете сделать:

xGrava.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final ProgressDialog PD = ProgressDialog.show(NovaOcc.this,"","");
            PD.setContentView(R.layout.ipp_load);
            PD.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
            Thread mThread = new Thread() {
                @Override
                public void run() {
                    if (ValidaDados() == true) {
                        if (GravaDados() == true) {
                            runOnUiThread(new Runnable() {
                                          @Override
                                           public void run() {
                                                xGrava.setVisibility(View.GONE);
                                                PD.dismiss();
                                           }
                                       }
                             );
                        }
                    }
                }
            };
            mThread.start();
        }
    });
         

Другие вопросы по теме