1

アプリケーションがサーバーに接続しようとするシナリオがありますが、その間に ProgressDialog が表示されるため、ユーザーはサーバーに接続していることがわかります。ただし、何らかの理由で接続が失敗または拒否された場合は、サーバーまたは何かによって接続が拒否されたことを示す別のダイアログを表示したいと考えています。

このために私がやっていることは、ProgressDialog を表示してからサーバーに接続しようとすることです。例外がスローされた場合は、AlertDialog にエラー メッセージを表示します。ProgressDialog の直後に AlertDialog を呼び出すと、コードが例外をスローします。また、ProgressDialog を閉じてから AlertDialog を開始しますが、機能しません。

アプローチを変更する必要がありますか、それともコードに何か問題がありますか? これが私がコードでやっていることです

ProgressDialog pg = ProgressDialog.show(this, null, "Contacting server. Please wait...", false);

ConnectionThread ct = new ConnectionThread(web);
ct.setProgressDialog(pg);
ct.setErrorDialog(dialog);
ct.start();

これは、webAccess クラスを介してサーバーへの接続を試行する ConnectionThread クラスです。

public class ConnectionThread extends Thread {

    private WebAccess _webAccess;
    private ProgressDialog _progressDialog;
    private AlertDialog _alertDialog;

    public ConnectionThread(WebAccess webAccess) {
        _webAccess = webAccess;
    }

    public void setProgressDialog(ProgressDialog dialog) {
        _progressDialog = dialog;
    }

    public void setErrorDialog(AlertDialog dialog) {
        _alertDialog = dialog;
    }

    @Override
    public void run() {
        try {
            _webAccess.invoke();
            _progressDialog.dismiss();

        } catch (Exception ex) {
                _progressDialog.cancel();
            _alertDialog.show();
            }
        }
    }
4

1 に答える 1

0

you cannot show dialogs from the background threads. This has been already answered in another question thread.

Anyway try to use handler or run a runnable on ui thread.

于 2012-08-18T17:53:57.860 に答える