簡體   English   中英

Android:AysncTask中的Progress Dialog錯誤

[英]Android: Progress Dialog error in AysncTask

我有一些代碼在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

--UPDATE--

似乎我的問題是我在宣布進度對話框的地方。 我最終發現我可以在新創建的構造函數中聲明進度對話框

progressSpinner = new ProgressDialog(mContext);

然后它將允許AsyncTask類訪問的所有其他方法更新消息。

問題可能在於您在創建ProgressDialog時如何引用MainActivity 將公共構造函數添加到AsyncTask和名為mContext的類字段:

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

在創建類的對象時,在MainActivity傳遞this

         ShowDialogAsyncTask task = new ShowDialogAsyncTask(this);

AsyncTask ,使用該上下文創建ProgressDialog

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM