0

以下のコードは、エラーの原因です。私が欲しかったのは、loginDialog1後を育てることloginRedirectCheckです。しかし、を表示する代わりにprogressDialog、アプリケーションがクラッシュします。私は何か間違ったことをしていますか?どうすれば修正できますか?ありがとうございました。

Runnable myRunnable = new Runnable() {
    @Override
    public void run() {
        while(loginCheck){
            if(loginRedirectCheck){
                loginCheck = false;
                new Handler().post(new Runnable() {
                    @Override
                    public void run() {
                        loginDialog1.show();
                    }
                });
            }
        }
    }
};

Thread myThread = new Thread(myRunnable);
myThread.start();
4

1 に答える 1

0

私は何か間違ったことをしていますか?

はい、Handler新しいスレッドの内部を作成しています。これにより、投稿されRunnablesたものがそこで実行されloginDialog1.show();、新しいスレッド内で実行されますが、UI スレッドで実行する必要があると思います。

どうすれば修正できますか?

UI スレッド内にハンドラーを作成し (たとえば、 を含むオブジェクトのインスタンス変数としてmyThrad.start()) post()、新しく作成されたハンドラーではなく、そのハンドラーに対して実行可能なものを作成します。

編集:

あなたの場合、最終的なローカル変数は問題ないと思います:

final Handler myHandler = new Handler();

Runnable myRunnable = new Runnable() {
 [...]
                loginCheck = false;
                myHandler.post(new Runnable() {
                    @Override
 [...]
于 2013-01-09T18:09:21.543 に答える