Открывать диалоги напрямую? - PullRequest
0 голосов
/ 28 ноября 2011

У меня есть следующий код для кнопки, который я хочу создать для подключения через сокет, а затем попытаться отправить данные по сети. Когда у меня нет сервера для сокета, требуется несколько секунд, прежде чем приложение распознает, и я получаю ошибку. В это время приложение ничего не делает (как и следовало ожидать), чтобы получить простое уведомление для пользователя, чтобы показать ему, что приложение не сломано, я хочу вызвать небольшой ProgressBar.

private void sendButtonListener(Button sendButton, final String server,
        final int port) {
    sendButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            refreshInput();

            showDialog(DIALOG_CONNECTING);
            //Getting the SocketConnection and try to send the Data
            attempToSendXML(builder, profilename);
            dismissDialog(DIALOG_CONNECTING);
        }
    });
}

Моя проблема в том, что, похоже, метод showDialog() вызывает ProgressBar после завершения метода onClick(View v). Так что для моего примера он ничего не показывает (он просто зависает, пока метод attempToSendXML() не завершится), потому что я закрываю диалог после того, как попытался отправить данные.

Надеюсь, вы, ребята, получите мою точку зрения и сможете мне помочь. Я искал около 2 часов и действительно не понимаю ...

1 Ответ

1 голос
/ 28 ноября 2011

Не следует блокировать поток пользовательского интерфейса с помощью длинной операции, например attempToSendXML().

Вместо этого следует использовать AsyncTask.AsyncTask также должен быть решением вашей проблемы.

См. здесь и здесь .

AsyncTask имеет onPreExecute() -методгде вы показываете свой диалог.attempToSendXML() будет затем выполнен в методе doInBackground, и диалоговое окно будет закрыто в методе onPostExecute AsyncTask.Делая это таким образом, вы не блокируете UI-поток (и не получаете исключений ANR), и диалоговое окно хода выполнения показывает, что операция работает в фоновом режиме.

...