user1302569
user1302569

Reputation: 7191

Need solution my bug with context android

I have application which is connected with webservice. When I start application I call class:

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

I get Error:

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

In DataRetrive I get all data from webservice and after that I call MainActivity. What is wrong and how I can fix this bug. I try: progressBar = new ProgressDialog(this);, progressBar = new ProgressDialog(getApplicationContext());, progressBar = new ProgressDialog(getBaseContext); but no result.

Upvotes: 0

Views: 83

Answers (2)

thepoosh
thepoosh

Reputation: 12587

Application is NOT Context, you cannot use it as a base for a Dialog.

what you should do is in the MainActivity (meaning the first activity that runs) is to start the ProgressBar instead of doing this in the Application level.

try reading some of the great documentation in the developers site

EDIT:

from what I understand, you are trying to create a splash screen that will do work before the actual app starts.

this is a very simple thing to do and should be done like this:

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

Upvotes: 4

varevarao
varevarao

Reputation: 2186

As was mention by @thepoosh, Application is not a context. Also, if you're looking to do this just once when the application is fired up then put this code in one function in your default activity (the first one that'll appear), and call this function in onCreate(). ALSO, if it's a blocking task you're performing then put it in another Thread, and dismiss the ProgressDialog once you're done computing or downloading.

If you want to do this only the first time the application is started, and not each time your first activity opens (owing to user traversing back and forth), then maintain a static flag which is set once the download completes, and is not updated until another download is needed.

Upvotes: 0

Related Questions