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.