0

Note: Already visited this link but not helpful.

While running Robolectric Junit tests, I am getting StackOverFlow Error caused by

ProgressDialog.show()

Call made inside AsyncTask.

I have following kind of activity:

public abstract class TransactionFragmentActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.transction_layout);             
        SetUpService setup = new SetUpService();
        setup.execute();
    }

    private class SetUpService extends AsyncTask<String, Void, Boolean> {

        private ProgressDialog dialog = new ProgressDialog(TransactionFragmentActivity.this);

        /** progress dialog to show user that the backup is processing. */
        /** application context. */
        @Override
        protected void onPreExecute() {
            SetUpService.this.dialog.setMessage("Please wait");
            SetUpService.this.dialog.setCancelable(false);
            SetUpService.this.dialog.show();
        }

        @Override
        protected Boolean doInBackground(final String... args) {
            // Setting data 
            Log.d(TAG,"doInBackground...");

            fetchData(); //some method doing work
            return true;
        }


        @Override
        protected void onPostExecute(final Boolean success) {
            if (dialog != null && dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    }
}

following is the stacktrace:

java.lang.StackOverflowError at java.lang.Class.getConstructor0(Unknown Source) at java.lang.Class.getDeclaredConstructor(Unknown Source) at org.robolectric.bytecode.RobolectricInternals.newInstance(RobolectricInternals.java:39) at org.robolectric.bytecode.RobolectricInternals.directlyOn(RobolectricInternals.java:54) at org.robolectric.Robolectric.directlyOn(Robolectric.java:366) at org.robolectric.shadows.ShadowView.directly(ShadowView.java:439) at org.robolectric.shadows.ShadowView.invalidate(ShadowView.java:168) at android.view.View.invalidate(View.java) at android.widget.TextView.setPadding(TextView.java:2122) at android.view.View.recomputePadding(View.java:10914) at android.view.View.resolvePadding(View.java:11584) at android.view.View.resolveLayoutDirection(View.java:11524) at android.view.View.onAttachedToWindow(View.java:11440) at android.widget.TextView.onAttachedToWindow(TextView.java:4448) at android.view.View.dispatchAttachedToWindow(View.java:11755) at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2424) at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2424) at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2424) at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2424) at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2424) at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2424) at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2424) at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2424) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1201) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) at android.view.Choreographer.doCallbacks(Choreographer.java:555) at android.view.Choreographer.doFrame(Choreographer.java:525) at android.view.Choreographer$FrameHandler.handleMessage(Choreographer.java:657) at org.robolectric.shadows.ShadowHandler.routeMessage(ShadowHandler.java:125) at org.robolectric.shadows.ShadowHandler.access$100(ShadowHandler.java:25) at org.robolectric.shadows.ShadowHandler$1.run(ShadowHandler.java:110) at org.robolectric.util.Scheduler.postDelayed(Scheduler.java:37) at org.robolectric.shadows.ShadowLooper.post(ShadowLooper.java:198) at org.robolectric.shadows.ShadowHandler.postDelayed(ShadowHandler.java:56) at org.robolectric.shadows.ShadowHandler.sendMessageDelayed(ShadowHandler.java:105) at org.robolectric.shadows.ShadowHandler.sendMessageAtTime(ShadowHandler.java:160) at android.os.Handler.sendMessageAtTime(Handler.java) at android.view.Choreographer.scheduleFrameLocked(Choreographer.java:479) at android.view.Choreographer.postCallbackDelayedInternal(Choreographer.java:309) at android.view.Choreographer.postCallbackDelayed(Choreographer.java:292) at android.view.Choreographer.postCallback(Choreographer.java:266) at android.view.ViewRootImpl.scheduleTraversals(ViewRootImpl.java:974) at android.view.ViewRootImpl.setLayoutParams(ViewRootImpl.java:792) at android.view.WindowManagerImpl.updateViewLayout(WindowManagerImpl.java:343) at android.app.Activity.onWindowAttributesChanged(Activity.java:2267) at android.view.Window.setDefaultWindowFormat(Window.java:1226) at com.android.internal.policy.impl.PhoneWindow.access$1300(PhoneWindow.java:105) at com.android.internal.policy.impl.PhoneWindow$DecorView.drawableChanged(PhoneWindow.java:2407) at com.android.internal.policy.impl.PhoneWindow$DecorView.fitSystemWindows(PhoneWindow.java:2345) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1203) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) at android.view.Choreographer.doCallbacks(Choreographer.java:555) at android.view.Choreographer.doFrame(Choreographer.java:525) at android.view.Choreographer$FrameHandler.handleMessage(Choreographer.java:657) at org.robolectric.shadows.ShadowHandler.routeMessage(ShadowHandler.java:125) at org.robolectric.shadows.ShadowHandler.access$100(ShadowHandler.java:25) at org.robolectric.shadows.ShadowHandler$1.run(ShadowHandler.java:110) at org.robolectric.util.Scheduler.postDelayed(Scheduler.java:37) at org.robolectric.shadows.ShadowLooper.post(ShadowLooper.java:198) at org.robolectric.shadows.ShadowHandler.postDelayed(ShadowHandler.java:56) at org.robolectric.shadows.ShadowHandler.sendMessageDelayed(ShadowHandler.java:105) at org.robolectric.shadows.ShadowHandler.sendMessageAtTime(ShadowHandler.java:160) at android.os.Handler.sendMessageAtTime(Handler.java) at android.view.Choreographer.scheduleFrameLocked(Choreographer.java:479) at android.view.Choreographer.postCallbackDelayedInternal(Choreographer.java:309) at android.view.Choreographer.postCallbackDelayed(Choreographer.java:292) at android.view.Choreographer.postCallback(Choreographer.java:266) at android.view.ViewRootImpl.scheduleTraversals(ViewRootImpl.java:974) at android.view.ViewRootImpl.setLayoutParams(ViewRootImpl.java:792) at android.view.WindowManagerImpl.updateViewLayout(WindowManagerImpl.java:343) at android.app.Activity.onWindowAttributesChanged(Activity.java:2267) at android.view.Window.setDefaultWindowFormat(Window.java:1226) at com.android.internal.policy.impl.PhoneWindow.access$1300(PhoneWindow.java:105) at com.android.internal.policy.impl.PhoneWindow$DecorView.drawableChanged(PhoneWindow.java:2407) at com.android.internal.policy.impl.PhoneWindow$DecorView.fitSystemWindows(PhoneWindow.java:2345) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1203) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) at android.view.Choreographer.doCallbacks(Choreographer.java:555) at android.view.Choreographer.doFrame(Choreographer.java:525) at android.view.Choreographer$FrameHandler.handleMessage(Choreographer.java:657) at org.robolectric.shadows.ShadowHandler.routeMessage(ShadowHandler.java:125) at org.robolectric.shadows.ShadowHandler.access$100(ShadowHandler.java:25) at org.robolectric.shadows.ShadowHandler$1.run(ShadowHandler.java:110) at org.robolectric.util.Scheduler.postDelayed(Scheduler.java:37) at org.robolectric.shadows.ShadowLooper.post(ShadowLooper.java:198) at org.robolectric.shadows.ShadowHandler.postDelayed(ShadowHandler.java:56) at org.robolectric.shadows.ShadowHandler.sendMessageDelayed(ShadowHandler.java:105) at org.robolectric.shadows.ShadowHandler.sendMessageAtTime(ShadowHandler.java:160) at android.os.Handler.sendMessageAtTime(Handler.java) at android.view.Choreographer.scheduleFrameLocked(Choreographer.java:479) at............

Community
  • 1
  • 1
Shridutt Kothari
  • 7,326
  • 3
  • 41
  • 61
  • try to initialize the `ProgressDialog` in onPreExecute. – SRB Bans Nov 30 '15 at 14:31
  • and where is your `super.onPreExecute();` and `super.onPostExecute(success);` super clause. – SRB Bans Nov 30 '15 at 14:34
  • @sourabhbans, initializing the ProgressDialog in onPreExecute did not work, super.onPreExecute(); and super.onPostExecute(success); is also not helping, still getting StackOverFlow error. – Shridutt Kothari Dec 01 '15 at 06:30

2 Answers2

0

try final ProgressDialog dialog = new ProgressDialog(getApplicationContext);

Aks4125
  • 4,522
  • 4
  • 32
  • 48
0
private ProgressDialog dialog = new ProgressDialog(getActivity());

protected void onPreExecute() { 
    dialog.setMessage("Please wait");
    dialog.setCancelable(false);
    dialog.show();
} 

or

Activity act = (TransactionFragmentActivity) this;

private ProgressDialog dialog = new ProgressDialog(act);

protected void onPreExecute() { 
    dialog.setMessage("Please wait");
    dialog.setCancelable(false);
    dialog.show();
}

Think it will work. Check it out and let me know.

kryger
  • 12,906
  • 8
  • 44
  • 65
HourGlass
  • 1,805
  • 1
  • 15
  • 29
  • Inside SetUpService (AsyncTask) getActivity() is not allowed as per compiler, and also casting of TransactionFragmentActivity to Activity didn't work. – Shridutt Kothari Dec 01 '15 at 06:28
  • okay, I am pretty sure that passing the Context to Progress dialog is the problem. and I don't have answer for that. please look into that area. your Async task was fine. – HourGlass Dec 01 '15 at 06:31
  • ok, but the code is working in Android Dev Env, I am getting error in Robolectric Test case execution, on the call of dialog.show() method, so not sure how to resolve this. – Shridutt Kothari Dec 01 '15 at 06:36