0

I have long task run at background thread by AsyncTask.In first Asynctask at onPostExecute(String result) { method I have invoked other AsyncTask like this:

private class get_list_home extends AsyncTask<String, String, String> {
    ProgressDialog prog3;

    @Override
    protected void onPreExecute() {
        if (!isFinishing()) {
            prog3 = ProgressDialog.show(MainActivity.this, "", " receiving");
        }
        super.onPreExecute();
    }
  @Override
    protected String doInBackground(String... params) {

        String content = null;
        try {
            content = httpmanager.getData(AppUtil.getConfig(MainActivity.this, MainActivity.SETTING_GEO_SERVICE) + "GetContract_Info_Rest?DeviceNo=" + common.deviceId + "&&pNnidVistContract=" + params[0]);
...

protected void onPostExecute(String result) {
...
for (Get_NIdCadastre_NIdVisitContractCadastre get : a) {
                        String NIdCadastre = get.getNIdCadastre();
                        String NIdVisitContractCadastre = get.getNIdVisitContractCadastre();
                        get_List_Visit visit = new get_List_Visit(get.getNIdCadastre(), get.getNIdVisitContractCadastre());
                        visit.executeOnExecutor((AsyncTask.THREAD_POOL_EXECUTOR), NIdCadastre, NIdVisitContractCadastre);
...

and into called task i have:

private class get_List_Visit extends AsyncTask<String, String, String> {
    ProgressDialog prog2;
    String contract, cont2;

    get_List_Visit(String contract, String cont2) {
        this.contract = contract;
        this.cont2 = cont2;
    }

    @Override
    protected void onPreExecute() {
        if (!isFinishing()) {
            prog2 = ProgressDialog
                    .show(MainActivity.this, "", " receiving info");
        }
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params) {
        String content = null;
        try {
            content = httpmanager.getData(AppUtil.getConfig(MainActivity.this, MainActivity.SETTING_GEO_SERVICE) + "SearchVisit_Info_Rest?NidCadastre=" + params[0] + "&&NIdVisitContractCadastre=" + params[1]);
            if (content != null && !content.equals("")) {...

but after few second when these tasks are running I got this error:

 Process: com.safarayaneh.estaterevisit.ts.debug, PID: 545
              android.view.WindowManager$BadTokenException: Unable to add window -- window android.view.ViewRootImpl$W@65e71ad has already been added
                  at android.view.ViewRootImpl.setView(ViewRootImpl.java:934)
                  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:377)
                  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:105)
                  at android.app.Dialog.show(Dialog.java:404)
                  at android.app.ProgressDialog.show(ProgressDialog.java:151)
                  at android.app.ProgressDialog.show(ProgressDialog.java:134)
                  at android.app.ProgressDialog.show(ProgressDialog.java:129)
                  at com.safarayaneh.estaterevisit.activity.MainActivity$get_List_Visit.onPreExecute(MainActivity.java:547)
                  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:620)
                  at com.safarayaneh.estaterevisit.activity.MainActivity$get_list_home.onPostExecute(MainActivity.java:519)
                  at com.safarayaneh.estaterevisit.activity.MainActivity$get_list_home.onPostExecute(MainActivity.java:455)
                  at android.os.AsyncTask.finish(AsyncTask.java:667)
                  at android.os.AsyncTask.-wrap1(AsyncTask.java)
                  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6823)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1563)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451)

I have researching and I see this post . according this suggestion I first my Activity has finished or not : isFinishing() but still got above error. what is your suggestion?

***************Edit************* when I comment this

prog2 = ProgressDialog.show(MainActivity.this, "", " receiving info"); error gone but I do not have any dialog while thread is working and my data is fetched from server.

Cyrus the Great
  • 2,571
  • 1
  • 20
  • 65

1 Answers1

0

please change in your onPreExecute method

From

@Override
    protected void onPreExecute() {
        if (!isFinishing()) {
            prog3 = ProgressDialog.show(MainActivity.this, "", " receiving");
        }
        super.onPreExecute();
    }

To

@Override
    protected void onPreExecute() {
        if (!isFinishing()) {
           prog3 =new ProgressDialog(MainActivity.this);
            prog3 .setMessage("");
            prog3 .setTitle("");
            prog3 .show();
        }
        super.onPreExecute();
    }
Haresh Ramani
  • 360
  • 1
  • 14