显示AsyncTask中的ProgressDialog



我发现了一些讨论,并进行了跟踪。但仍然有问题,LogCat的错误是,我认为Unable to add window

04-19 16:50:47.835: E/AndroidRuntime(16147):    FATAL EXCEPTION: main
04-19 16:50:47.835: E/AndroidRuntime(16147):    android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
04-19 16:50:47.835: E/AndroidRuntime(16147):    at android.view.ViewRootImpl.setView(ViewRootImpl.java:712)
04-19 16:50:47.835: E/AndroidRuntime(16147):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:346)
04-19 16:50:47.835: E/AndroidRuntime(16147):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
04-19 16:50:47.835: E/AndroidRuntime(16147):    at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
04-19 16:50:47.835: E/AndroidRuntime(16147):    at android.app.Dialog.show(Dialog.java:277)
04-19 16:50:47.835: E/AndroidRuntime(16147):    at com.test.MainActivity$2.run(MainActivity.java:213)
04-19 16:50:47.835: E/AndroidRuntime(16147):    at android.app.Activity.runOnUiThread(Activity.java:4784)
04-19 16:50:47.835: E/AndroidRuntime(16147):    at com.test.MainActivity.displayStatus(MainActivity.java:210)

我的程序是

public class MainActivity extends Activity {
      protected void onCreate(Bundle savedInstanceState) {
      }
      public class SSHConnect extends AsyncTask<Integer, Integer, Integer> {    
           ProgressDialog myPd_ring;
           protected void onProgressUpdate(Integer... progress) {}
           protected void onPostExecute(Integer  result) {
              if (myPd_ring.isShowing()) {
                 myPd_ring.dismiss();;
              }
           }
           protected void onPreExecute() {
              myPd_ring= new ProgressDialog(getApplicationContext());
              myPd_ring.setCancelable(true);
              myPd_ring.setTitle("Please wait!");
              myPd_ring.setMessage("Connecting...");
              myPd_ring.setIndeterminate(true);
              myPd_ring.setProgressStyle(ProgressDialog.STYLE_SPINNER);
              myPd_ring.show();
           }
           @Override
           protected Integer doInBackground(Integer... params) {}
     }

}

使用

myPd_ring= new ProgressDialog(MainActivity.this);

代替

myPd_ring= new ProgressDialog(getApplicationContext());

AsyncTask类中的getApplicationContext?

摘自上述链接。

"为什么getApplicationContext()不能从AsyncTask的UI部分工作?"——因为getApplicationContext是Context上的一个方法,而AsyncTask不是从Context继承的。

尝试使用。

protected void onPreExecute() {
          myPd_ring= new ProgressDialog(MainActivity.this);
          myPd_ring.setCancelable(true);
          myPd_ring.setTitle("Please wait!");
          myPd_ring.setMessage("Connecting...");
          myPd_ring.setIndeterminate(true);
          myPd_ring.setProgressStyle(ProgressDialog.STYLE_SPINNER);
          myPd_ring.show();
       }

最新更新