需要通过上下文android解决我的bug吗

需要通过上下文android解决我的bug吗,android,Android,我有一个与webservice连接的应用程序。 启动应用程序时,我调用类: public class CaApplication extends Application { @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); DataRetrieve dr ; ProgressDialog p

我有一个与webservice连接的应用程序。 启动应用程序时,我调用类:

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
在DataRetrieve中,我从webservice获取所有数据,然后调用MainActivity。
出了什么问题以及如何修复此错误。我尝试:
progressBar=newprogressdialog(这个)
progressBar=newprogressdialog(getApplicationContext())
progressBar=newprogressdialog(getBaseContext)但没有结果。

应用程序
不是
上下文
,不能将其用作对话框的基础

您应该在MainActivity(即运行的第一个活动)中执行的操作是启动ProgressBar,而不是在应用程序级别执行此操作

试着读一些书

编辑:

据我所知,您正在尝试创建一个启动屏幕,该屏幕将在实际应用程序启动之前工作

这是一件非常简单的事情,应该这样做:

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();
    }
}

应用程序
不是
上下文
,不能将其用作对话框的基础

您应该在MainActivity(即运行的第一个活动)中执行的操作是启动ProgressBar,而不是在应用程序级别执行此操作

试着读一些书

编辑:

据我所知,您正在尝试创建一个启动屏幕,该屏幕将在实际应用程序启动之前工作

这是一件非常简单的事情,应该这样做:

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();
    }
}

正如@thepoosh所提到的,应用程序不是上下文。另外,如果您希望在应用程序启动时只执行一次,则将此代码放入默认活动中的一个函数中(将出现的第一个函数),并在
onCreate()
中调用此函数。另外,如果您正在执行的是一个阻塞任务,则将其放入另一个
线程中
,并在完成计算或下载后关闭ProgressDialog


如果您只想在应用程序第一次启动时执行此操作,而不是每次打开第一个活动时(由于用户来回遍历),请维护一个静态标志,该标志在下载完成后设置,并且在需要另一次下载之前不会更新。

正如@thepoosh所述,应用程序不是上下文。另外,如果您希望在应用程序启动时只执行一次,则将此代码放入默认活动中的一个函数中(将出现的第一个函数),并在
onCreate()
中调用此函数。另外,如果您正在执行的是一个阻塞任务,则将其放入另一个
线程中
,并在完成计算或下载后关闭ProgressDialog


如果您只想在应用程序第一次启动时执行此操作,而不是每次打开第一个活动时(由于用户来回遍历),请在下载完成后维护一个静态标志,并且在需要另一次下载之前不会更新。

您不能将
应用程序
上下文
传递给
对话框
对话框
活动
绑定。您不能将
应用程序
上下文
传递给
对话框
对话框
绑定到
活动
。但我需要在启动MainActivity之前显示有关加载的信息。在CAApplication类中我如何做到这一点?这并没有真正的意义,我不明白你们想做什么。当我启动应用程序时,我看到白色页面大约5-10秒,DataRetrieve开始下载数据。然后启动MainActivity onCreate方法。当我看到白色页面时,我想添加微调器或其他形状。我必须在课堂应用中这样做,因为这门课先开始。当我在onCreate中添加此内容时,我会在下载所有内容后看到对话框谢谢。这对我来说是一个很好的解决方案,但我需要在开始MainActivity之前显示有关加载的信息。在CAApplication类中我如何做到这一点?这并没有真正的意义,我不明白你们想做什么。当我启动应用程序时,我看到白色页面大约5-10秒,DataRetrieve开始下载数据。然后启动MainActivity onCreate方法。当我看到白色页面时,我想添加微调器或其他形状。我必须在课堂应用中这样做,因为这门课先开始。当我在onCreate中添加此内容时,我会在下载所有内容后看到对话框谢谢。这对我来说是一个很好的解决方案