2012-02-08 1 views
0

Попытка показать ProgressDialog, но получение: Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare().Невозможно показать ProgressDialog из нити пользовательского интерфейса. Как?

Вот мой код:

public class SocketThread implements Runnable { 
    BufferedReader in; 
    private ProgressDialog dialog; 

    public void run() 
    { 
     socket = null; 

     while (true) 
     { 
      // Loop until connected to server 
      while (socket == null){ 
       dialog = new ProgressDialog(getApplicationContext()); 
       dialog.setMessage("Connecting to " + gatewayString); 
       dialog.setIndeterminate(true); 
       dialog.setCancelable(true); 
       AdvancedMultipleSeriesGraph.this.runOnUiThread(new Runnable() {  
        public void run() { 
         dialog.show(); 

        } 
       }); 

Можно ли исправить?

ответ

4

вы можете использовать Handler и использовать Handler.post(Runnable) или, если у вас есть контекст деятельности вы можете использовать Activity.runOnUiThread(Runnable action)

+0

Я не знал метод «Activity.runOnUiThread (...)». Здорово осознавать это сейчас. – Sly

+0

приветствуется – Blackbelt

+0

Возможно, я вас не понимаю, но мой код такой же, как вы предполагали: AdvancedMultipleSeriesGraph.this.runOnUiThread (...) –

0

НИКОГДА !!! выполнить обновление пользовательского интерфейса из потока, отличного от потока пользовательского интерфейса.

Решение может заключаться в том, чтобы добавить ссылку на обработчик при создании потока, чтобы вы могли отправлять уведомление об обновлении в потоке пользовательского интерфейса.