0

AsyncTaskを使用して複雑なバックグラウンド操作(送信するログファイルのコンパイル)を処理し、ProgressDialogを使用してユーザーの進行状況を表示しています。showDialog()を使用してみましたが、表示または却下されないようで(呼び出されることはありません)、その方法のチュートリアルに従いました...したがって、管理されていないものを使用していますが、メッセージが却下されません。また、ログファイルのコンパイルを開始するときにメッセージを更新したいと思っています(遅れているように見えるため、またはテキストビューが非常に長いため、想定どおりに更新されない可能性があります)。

コードを少し動かしたので、問題があるように見えます(onProgressUpdate()など)が、それを機能させる方法がわかりません。私はこのサイトを見回しましたが、私が抱えている問題は何も発生していないようです(とにかく正確ではありません)。RunOnUiThread()が機能せず、new Thread(){}が機能せず、onProgressUpdate()が機能しません(ドキュメントはこれについて混乱しています)。

また、決して却下しません。私はリスナーを設定しました、そしてそれは決して却下しません。

誰かが私のコードの何が問題なのか知っていますか?AsyncTaskは単純なはずだと思いました。

        private class BuildLogTask extends AsyncTask<Void, Void, String> {
        String temp;
        ProgressDialog progressdialog = new ProgressDialog(context); //variable is defined at onCreate (held as private, not static)

        @Override
        protected String doInBackground(Void... params) {
            temp = buildLog();
            logdata = temp;
            publishProgress();
            createLogFile();
            return temp;
        }

        protected void onProgressUpdate() {
            progressdialog.setMessage("Compiling Log File...");
        }

        @Override
        protected void onPreExecute() {
            Log.w(TAG,"Showing Dialog");
            send.setEnabled(false);
            ProgressDialog progressdialog = new ProgressDialog(context);
            progressdialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progressdialog.setMessage("Gathering Data...");
            progressdialog.setCancelable(false);
            progressdialog.setOnDismissListener(new DialogInterface.OnDismissListener() {

                @Override
                public void onDismiss(DialogInterface dialog) {
                    Log.e(TAG,"Progress Dialog dismissal.");

                }
            });
            progressdialog.show();
        }

        @Override
        protected void onCancelled(){
            Log.e(TAG,"Progress Dialog was Cancelled");
            progressdialog.dismiss();
            logdata=null;
        }

        @Override
        protected void onPostExecute(String result) {
            progressdialog.dismiss();
            send.setEnabled(true);
            previewAndSend();
        }

    }
4

3 に答える 3

2

そこには 2 つの異なる進行状況ダイアログがあり、1 つは onPreExecute() に対してローカルで、もう 1 つはグローバルです。onPostExecution() で却下するものは、実際には表示されなかったグローバルなものです。ローカル宣言を削除すると、機能するはずです。

于 2011-08-16T18:28:45.900 に答える
0

それを試してみてください、

交換:

progressdialog.show();

為に:

progressdialog = progressdialog.show();

幸運を。

于 2016-01-02T11:36:08.913 に答える
0

2 つの問題があります。

  1. onProgressUpdate の署名が正しくありません。代わりにこれを試してください:

    @Override protected void onProgressUpdate(Void... 進行状況) { progressdialog.setMessage("コンパイル中のログ ファイル..."); }

  2. onPreExecute() のローカル変数を使用して、progressDialog メンバー変数をマスクしています。

編集:2番目の問題が特定されました:

于 2011-08-16T18:11:31.380 に答える