0

AsyncTaskでいくつかの処理を行うコードがありますが、これが実行されている間、進行状況ダイアログを表示したいと思います。いろいろなところでメッセージを更新したいと思っていましたが、困っています。これが私がこれまでに持っているものです:

class ShowDialogAsyncTask extends AsyncTask<Void, String, Void>{

    private ProgressDialog progressSpinner;

        @Override
        protected void onPreExecute() {
        ProgressDialog progressSpinner = new ProgressDialog(MainActivity.this);
        progressSpinner.setTitle("File Download");
        progressSpinner.setMessage("Connecting to Internet");
        progressSpinner.show();
        }

        @Override
        protected Void doInBackground(Void... params) 
        {
            Log.v("doInBackground","1");
            try {
                Log.v("doInBackground","2");
                onProgressUpdate("Downloading File");
                //do some stuff
            } catch (IOException e) {
                result = "Error";
            }

            onProgressUpdate("Complete!");
            SystemClock.sleep(300);
            return null;
        }

        protected void onProgressUpdate(String... values) 
        {
        Log.e("onProgressUpdate",values[0]);
        try{
        progressSpinner.setMessage(values[0]);
        }catch(Exception e){Log.e("onProgressUpdate","Error!");}
        Log.e("onProgressUpdate","Success!");
        }

        @Override
        protected void onPostExecute(Void result) 
        {
        progressSpinner.dismiss();
        vf.showNext();
        }
}

メッセージを更新することを期待していたコードは機能せず、例外をスローするだけです。次に、進行状況ダイアログを閉じようとすると、すべてがクラッシュします。

私はAndroid開発にかなり慣れていないので、ポインタをいただければ幸いです。

すべてが少し洋ナシの形をしているLogcatエントリ。

03-22 22:59:30.189: W/dalvikvm(8133): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
03-22 22:59:30.189: E/AndroidRuntime(8133): Uncaught handler: thread main exiting due to uncaught exception
03-22 22:59:30.195: E/AndroidRuntime(8133): java.lang.NullPointerException

- アップデート -

私の問題は、進行状況ダイアログボックスを宣言していたところにあったようです。最終的に、このように新しく作成されたコンストラクターで進行状況ダイアログを宣言できることがわかりました。

progressSpinner = new ProgressDialog(mContext);

次に、AsyncTaskクラスの他のすべてのメソッドがメッセージを更新するためのアクセスを許可します。

4

1 に答える 1

2

MainActivity問題はおそらく、作成中に自分をどのように参照するかですProgressDialogAsyncTaskパブリックコンストラクターをとという名前のクラスフィールドに追加しますmContext

        public ShowDialogAsyncTask(Context c){
           mContext = c;
        }

クラスのオブジェクトを作成するときに、を渡しthisます。MainActivity

         ShowDialogAsyncTask task = new ShowDialogAsyncTask(this);

で、そのコンテキストを使用してAsyncTask作成しますProgressDialog

于 2013-03-22T23:24:34.027 に答える