我发现了一些讨论,并进行了跟踪。但仍然有问题,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();
}