2012-11-25 34 views
0

我有一個與Web服務連接的應用程序。 當我開始我的應用程序調用類:需要解決我的錯誤與背景的Android

public class CaApplication extends Application { 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 
     DataRetrieve dr ; 
     ProgressDialog progressBar; 

      progressBar = new ProgressDialog(this); 

      //progress bar orientation 
      progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 

      // Text that will appear on the progress bar dialog 
      progressBar.setMessage("Loading..."); 

     //set whether the progress bar is cancelable or not 
      progressBar.setCancelable(false); 
      progressBar.show(); 
     dr = new DataRetrieve(); 
    } 
} 

我得到錯誤:

11-25 15:39:36.698: E/AndroidRuntime(30429): Caused by: 11-25 15:39:36.698: E/AndroidRuntime(30429): java.lang.RuntimeException: Unable to create application com.example.storeclientdropdown.CambiumApplication: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3974) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.app.ActivityThread.access$1300(ActivityThread.java:127) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.os.Looper.loop(Looper.java:137) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.app.ActivityThread.main(ActivityThread.java:4441) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at java.lang.reflect.Method.invokeNative(Native Method) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at java.lang.reflect.Method.invoke(Method.java:511) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at dalvik.system.NativeStart.main(Native Method) 
11-25 15:39:36.698: E/AndroidRuntime(30429): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.view.ViewRootImpl.setView(ViewRootImpl.java:517) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:301) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.app.Dialog.show(Dialog.java:278) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at com.example.storeclientdropdown.CambiumApplication.onCreate(CambiumApplication.java:35) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969) 
11-25 15:39:36.698: E/AndroidRuntime(30429): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3971) 
11-25 15:39:36.698: E/AndroidRuntime(30429): ... 10 more 

在DataRetrive我從web服務的所有數據之後,我打電話MainActivity。 什麼是錯的,我怎樣才能修復這個錯誤。我嘗試:progressBar = new ProgressDialog(this);progressBar = new ProgressDialog(getApplicationContext());,progressBar = new ProgressDialog(getBaseContext);但沒有結果。

+1

你不可錯過的''Application'到Context'一個'Dialog',一個'Dialog'被綁定到'Activity'。 – Luksprog

回答

4

Application不是Context,你不能用它作爲對話框的基礎。

你應該做的是在MainActivity(意味着運行的第一個活動)是啓動進度,而不是在應用程序層面這樣做的。

嘗試讀一些great documentation in the developers site

編輯:

從我個人理解,你想創建一個閃屏,將實際的應用程序開始之前做的工作。

這是一個非常簡單的事,應該這樣做:

public class SplashScreen extends Activity { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     DataRetrieve dr ; 
     ProgressDialog progressBar; 

     progressBar = new ProgressDialog(this); 

     //progress bar orientation 
     progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 

     // Text that will appear on the progress bar dialog 
     progressBar.setMessage("Loading..."); 

     //set whether the progress bar is cancelable or not 
     progressBar.setCancelable(false); 
     progressBar.show(); 
     dr = new DataRetrieve(); // THIS SHOULD BE DONE IN AN AsyncTask 
     // WHEN DATA IS DONE RETRIEVING 
     progressBar.dismiss(); 
     Intent startApp = new Intent(SplashScreen.this, MainActivity.class); 
     startActivity(startApp); 
     finish(); 
    } 
} 
+0

但我需要在啓動MainActivity之前顯示有關加載的信息。我如何在CaPplication類中做到這一點? – user1302569

+0

,沒有實際意義,我不明白你想要做什麼 – thepoosh

+0

當我啓動應用程序,我看到的白頁約5-10秒和DataRetrive開始下載數據。之後,啓動MainActivity的onCreate方法。當我看到白頁時,我想添加微調或其他iformation。我必須在類CAAplication中這樣做,因爲這個類首先啓動。當我加入這個在我的onCreate看到下載的所有內容 – user1302569

0

如同一提的@thepoosh,應用程序是不是一個背景。另外,如果你要做到這一點只有一次,當應用程序被解僱了,然後把這個代碼在一個函數在默認的活動,並在onCreate()調用這個函數(會出現的第一個)。此外,如果您正在執行阻止任務,則將其放入另一個Thread,並在完成計算或下載後關閉ProgressDialog。

如果您只想在第一次啓動應用程序時執行此操作,而不是每次打開第一個活動時(由於用戶來回移動),請保留一個靜態標誌,該標誌在下載完成後設置,並且直到需要另一次下載才更新。