应用程序崩溃上显示ProgressDialog在非活动

问题描述:

从我MainActivty我想调用非活性类的方法有以下行:应用程序崩溃上显示ProgressDialog在非活动

Context context; 
context = getApplicationContext(); 
mClient.start(context); 

在非活性类:

public void start(Context context) { 

    final ProgressDialog startDialog; 
    startDialog = new ProgressDialog(context); 
    startDialog.setMessage("Loading..."); 
    startDialog.setCancelable(false); 
    startDialog.show(); 

    mHandler.post(new Runnable() { 
     @Override 
     public void run() { 

      Log.d(TAG,"Connecting to the server..."); 

      try { 
       connect(); 
      } catch (Exception e) { 

      }    

     startDialog.dismiss(); 

} 

该应用程序崩溃,并显示以下信息:

android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不是一个n application

哪里出错?在ProgressDialog

+2

不,它是不可能的。它是一个非活动类,你会得到一个编译时错误 – Blackbelt 2014-10-09 10:03:53

+0

它应该是可能的,如果你将一个上下文作为参数传递给非活动类 – andreasperelli 2014-10-09 10:14:36

+0

当然这是可能的,但'new ProgressDialog(this);'意味着不同 – Blackbelt 2014-10-09 10:17:11

传递上下文参数,所以更改

startDialog = new ProgressDialog(this); 

startDialog = new ProgressDialog(context); 

而在你mainActivity变化

context = getApplicationContext(); 

context = MainActivty.this; 
+0

这似乎工作。但我不明白为什么context = getApplicationContext();不起作用。如果我从MainActivity.this调用它,它应该在上下文变量中保存'MainActivity.this'... – andreasperelli 2014-10-09 10:18:18

+1

@andreasperelli see this [何时调用活动上下文或应用程序上下文?](http://*.com/questions/ 7298731 /当通话活动上下文 - 或应用上下文) – 2014-10-09 10:19:42

尝试在非活性类来改变这种.start(....)方法

startDialog = new ProgressDialog(context); 

,而不是

startDialog = new ProgressDialog(this); 

你也需要改变你的mainActivity

context = getApplicationContext(); 

context = MainActivity.this;; 

您需要通过上下文非活性类来创建Progress Dialog

startDialog = new ProgressDialog(context);