2017-08-07 3 views
0

J'essaie de convertir un fragment en activité et je rencontre un problème. J'ai 3 activités qui sont exécutées avec l'utilisation de Intentions:ProgressDialog (contexte) dans AsyncTask provoque une erreur "La fenêtre d'activité a fui"

MainActivity -> DetailsActivity -> MyPagerActivity 

PagerActivity fait un travail de l'interface utilisateur et demande un AsyncTask à la fin d'envoyer des données à mon serveur. Mon AsyncTask est dans un fichier Java séparé et j'appeler la fonction avec "MyPagerActivity.this" comme contexte:

NetFuncs nu = new NetFuncs(); 
... 
nu.FinishWork(MyPagerActivity.this, workData1, WorkData2); 

Dans les NetFuncs:

private Context mContext; 
.... 
public void FinishWork(Context context, String Data1, long Data2) { 
    if (networkUtils.isNetworkAvailable(context)) { 
     new FinishWorkServerCall(context, Data1, Data2).execute(); 
    } 
private class FinishWorkServerCall extends AsyncTask<Void, Void, Void> { 
    public class FinishWorkServerCall (Context context, String Data1, long Data2) { 
     mContext = context; 
     ... 
    } 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     // Showing progress dialog 
       pDialog = new ProgressDialog(mcontext); 
       pDialog.setMessage("Finishing your work..."); 
       pDialog.setCancelable(false); 
       pDialog.show(); 
    } 
    @Override 
    protected Void doInBackground(Void... arg0) { 
    .... 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     // Dismiss the progress dialog 
     if (pDialog != null && pDialog.isShowing()) { 
      pDialog.dismiss(); 
      pDialog = null; 
     } 
    } 

Dans le monde, tout Fragment a fonctionné à merveille. Dès que je suis passé à une activité autonome, directement à pDialog.show(); les application se bloque avec l'erreur suivante:

Activity com.example.MyPagerActivity has leaked window com.android.internal.policy.PhoneWindow$DecorView{7acbcb8 V.E...... R......D 0,0-1026,348} that was originally added here 

Je googlé beaucoup et tout le monde ne cessait de parler en rejetant postExecute() et OnDestroy() et je fais les deux personnes, mais il ne contribue pas. Je pense que le problème est un problème de contexte mais je ne sais pas quel pourrait être le problème et comment le réparer. J'ai utilisé getApplicationContext(), getBaseContext(), aucun travaillé. J'ai utilisé Toast() à la place et le même problème, donc je suppose que c'est un problème contetx.

EDIT: Mon MyPagerActivity ne se ferme pas ou finition en pDialog est en cours. Il reste debout.

Quelqu'un peut m'aider s'il vous plaît comprendre quel est le problème et aider à trouver une solution?

Merci

+0

Ajoutez votre trace de journal complète. –

+0

ajouter le code de l'appel FinishWork dans le fragment –

Répondre

-2

Je crois que je viens de trouver une solution: J'ai ajouté un gestionnaire:

 h = new Handler(Looper.getMainLooper()); 
     h.post(new Runnable() { 
      public void run() { 
       pDialog = new ProgressDialog(mcontext); 
       pDialog.setMessage("Finishing your work..."); 
       pDialog.setCancelable(false); 
       pDialog.show(); 

      } 
     }); 

et a fait l'pDialog dans le gestionnaire. Il a résolu le problème de s'écraser ... pas sûr pourquoi mais il le fait. Quelqu'un peut-il m'aider à comprendre pourquoi cela peut être?

0

enveloppez Il suffit bloc try/catch:

try { 
    pDialog.show(); 
} cath (Exception ignored) { 
    // do nothing, activity keeps working 
} 

post-scriptum c'est un "hack" mais le problème est toujours là. Ussualy, "a fui fenêtre" se produit, lorsque votre activité recrée pendant les travaux AsyncTask. Vous pouvez essayer d'ignorer la porgress si elle apparaît dans la méthode onDestroy().