2017-01-27 2 views
0

Здесь я столкнулся с подобными вопросами, но не смог исправить эту проблему.AsyncTask throwing android.view.WindowLeaked error

I KNOW Я показываю индикатор выполнения после того, как я вышел из этой операции, но я не понимаю, где я ошибаюсь в своем коде, я показываю индикатор выполнения в onPreExecute и отклоняю его в onPostExecute.

КОД

private class NetCheck extends AsyncTask <Void, Void, Boolean>{ 

     private ProgressDialog nDialog; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      nDialog = new ProgressDialog(Login.this); 
      nDialog.setTitle("Checking Network"); 
      nDialog.setMessage("Loading.."); 
      nDialog.setIndeterminate(false); 
      nDialog.setCancelable(true); 
      nDialog.show(); 
     } 

     @Override 
     protected Boolean doInBackground(Void... params) { 
      ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo nf = cm.getActiveNetworkInfo(); 
      if(nf != null && nf.isConnected()) { 
       try { 
        URL url = new URL("http://www.google.com"); 
        HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
        urlc.setConnectTimeout(5000); 
        urlc.connect(); 
        if(urlc.getResponseCode() == 200) { 
         return true; 
        } 
       } 
       catch(MalformedURLException e1) { 
        e1.printStackTrace(); 
       } 
       catch(IOException e2) { 
        e2.printStackTrace(); 
       } 
      } 
      return false; 
     } 

     @Override 
     protected void onPostExecute(Boolean th) { 
      if(th == true) { 
       nDialog.dismiss(); 
       new ProcessLogin().execute(); 
      } 
      else{ 
       nDialog.dismiss(); 
       errorMSG.setText("Error in Network Connection"); 
      } 
     } 
    } 

ОШИБКА ЖУРНАЛЫ

E/WindowManager: android.view.WindowLeaked: Activity boxyworldreseller.com.boxyworldreseller.Login has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{322c8153 V.E..... R......D 0,0-1026,483} that was originally added here 
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363) 
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271) 
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85) 
        at android.app.Dialog.show(Dialog.java:298) 
        at boxyworldreseller.com.boxyworldreseller.Login$NetCheck.onPreExecute(Login.java:92) 
        at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:591) 
        at android.os.AsyncTask.execute(AsyncTask.java:539) 
        at boxyworldreseller.com.boxyworldreseller.Login.NetAsync(Login.java:77) 
        at boxyworldreseller.com.boxyworldreseller.Login$3.onClick(Login.java:68) 
        at android.view.View.performClick(View.java:4780) 
        at android.view.View$PerformClick.run(View.java:19866) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5254) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+0

@Selvin У меня было eno ugh поиска, я вижу те же вопросы, но как я показываю диалог перед тем, как покинуть деятельность, на самом деле я вообще не покидаю работу. –

ответ

0
protected void onPreExecute() { 
      super.onPreExecute(); 
      if(!isFinishing() && this != null){ 
      nDialog = new ProgressDialog(Login.this); 
      nDialog.setTitle("Checking Network"); 
      nDialog.setMessage("Loading.."); 
      nDialog.setIndeterminate(false); 
      nDialog.setCancelable(true); 
      nDialog.show(); 
} 
     } 

Перед Showin прогресса диалога проверки этого два условия, если вы используете деятельность другие, если вы используете фрагмент затем использовать, как показано ниже:

protected void onPreExecute() { 
     super.onPreExecute(); 
     if(!getActivity().isFinishing() && getActivity()!= null) 
      nDialog = new ProgressDialog(Login.this); 
      nDialog.setTitle("Checking Network"); 
      nDialog.setMessage("Loading.."); 
      nDialog.setIndeterminate(false); 
      nDialog.setCancelable(true); 
      nDialog.show(); 
     } 
    } 
+0

Я добавил это условие, без изменений, ту же ошибку, которую я получаю –