Не могу показать ProgressDialog из потока не пользовательского интерфейса. Как? - PullRequest
0 голосов
/ 08 февраля 2012

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

Вот мой код:

    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();

                    }
                });

Это так?можно исправить?

Ответы [ 2 ]

4 голосов
/ 08 февраля 2012

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

0 голосов
/ 08 февраля 2012

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

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

...