-3

從我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

回答

1

傳遞上下文參數,所以更改

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://stackoverflow.com/questions/ 7298731 /當通話活動上下文 - 或應用上下文) – 2014-10-09 10:19:42

1

嘗試在非活性類來改變這種.start(....)方法

startDialog = new ProgressDialog(context); 

,而不是

startDialog = new ProgressDialog(this); 

你也需要改變你的mainActivity

context = getApplicationContext(); 

context = MainActivity.this;; 

您需要通過上下文非活性類來創建Progress Dialog

0
startDialog = new ProgressDialog(context); 
相關問題