Почему мой диалог предупреждений не работает внутри потока? - PullRequest
0 голосов
/ 15 августа 2011

Я использую поток, чтобы я мог показать диалог прогресса, пока мое приложение загружает некоторые данные.Если есть ошибка, он остановит диалог прогресса и покажет всплывающее сообщение «ошибка».Однако я обнаружил, что диалоговые окна предупреждений не могут запускаться в потоке пользовательского интерфейса и что мне нужно использовать обработчик.Может кто-нибудь с помощью с этим вопросом?Вот мой кодСпасибо

verifyCode.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub
    final ProgressDialog progressDialog = ProgressDialog.show(
          Activate.this, "", "Loading...");    

    new Thread(new Runnable() {
        public void run() {
               try {
                     new AlertDialog.Builder(Activate.this)
                    .setTitle(getResources().getString(R.string.InvalidKey))
                    .setMessage(getResources().getString(
                    R.string.PleaseEntervalidRegistration)).setNeutralButton(
                    "OK", null).show();

                    progressDialog.dismiss();

                    //more code
     }).start();
}

1 Ответ

3 голосов
/ 15 августа 2011

Вы не можете вносить изменения в элемент пользовательского интерфейса в потоках без пользовательского интерфейса. onClick будет выполняться в потоке пользовательского интерфейса, но поскольку вы порождаете Thread внутри onClick, элементы, не относящиеся к пользовательскому интерфейсу, не могут управляться изнутри этого Thread. Переместите ваши AlertDialog и ProgressDialog вызовы непосредственно перед порождением нового Thread.

Кроме того, как подсказывает @lightblade, если вам нужно выполнить какое-то действие, требующее интенсивной фоновой обработки и манипулирования пользовательским интерфейсом на основе этой обработки, вам следует использовать AsyncTask s. Он предоставляет методы, которые можно переопределить для предварительной обработки, фактической обработки, последующей обработки и прогресса обновления.

...