2012-09-03 45 views
0

在下面給出的代碼我得到,我得到的onProgressUpdate在alert.show異常錯誤「Alertdialog解散前,給予活動窗口泄露異常活動被關閉」。這是什麼解決方案?活動警報之前被關閉解散

String values[] = { Login.uname, Login.pass }; 
        new Communicator().execute(values); 

    class Communicator extends AsyncTask<String, String, String> 
     { 
     int prog = 0; 

     @Override 
     protected String doInBackground(String... params) { 
      String response = null; 
      try { 
       if(Login.uname != null && Login.pass != null){ 
        sync(Login.uname, Login.pass); 
       }else if(SplashScreen.user != null && SplashScreen.pas != null){ 
        sync(SplashScreen.user, SplashScreen.pas); 
       } 
       if("ok".equalsIgnoreCase(status)) 
       { 
//     else{ 
        if(db != null) 
        { 
         if (Login.uname != null) { 
          usernam = Login.uname; 
         } else if (SplashScreen.user != null) { 
          usernam = SplashScreen.user; 
         } 
         Cursor cursor = db.getAllMixes(SplashScreen.user); 
         if(cursor!=null && cursor.getCount() > 0) 
         { 
          Log.e(">><<", ">>cursor.getCount()<<"+cursor.getCount()); 
         } 
        } 
        count ++; 
//     } 
       } 
       totalsize = 0; 
       for(int i=0; i<list.size(); i++) 
       { 
        totalsize += Integer.parseInt(cont.get(i).getSize()); 
       } 

      } catch (Exception e) { 
       Log.e("Data.LOG", e.getMessage(), e); 

      } finally { 
      } 
      return response; 
     } 

     @Override 
     protected void onPreExecute() { 
      prog = 0; 
      super.onPreExecute(); 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 

      if ("ok".equalsIgnoreCase(status)) 
      { 
       sizekb=0; 
       textsync.setText("Syncing mix "+1+"/"+cont.size()); 
       if(cont.size() == 0){ 
        progressBar2.setVisibility(View.INVISIBLE); 
        progress.setProgress(0); 
        textsync.setText("No Mixes on Server"); 
        alertdial =new AlertDialog.Builder(NeliteMusicActivity.this).create(); 
        alertdial.setTitle(R.string.set4Play); 
        alertdial.setMessage(getString(R.string.noMixes)); 
        alertdial.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
        alertdial.setButton(getString(R.string.ok), 
          new DialogInterface.OnClickListener() 
        { 
          public void onClick(DialogInterface dialog, int which) { 
           alertdial.dismiss(); 
           animatedStartActivity(); 
         } 
         }); 
        alertdial.setCanceledOnTouchOutside(false); 
        alertdial.show(); 
       } 
      }if("tomany".equalsIgnoreCase(status)) 
      { 
       progress.setVisibility(View.INVISIBLE); 
       progressBar2.setVisibility(View.INVISIBLE); 
       textsync.setVisibility(View.INVISIBLE); 
       AlertDialog alert =new AlertDialog.Builder(NeliteMusicActivity.this).create(); 
       alert.setTitle(R.string.set4Play); 
       alert.setMessage(getString(R.string.twoDevice)); 
       alert.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
       alert.setButton(getString(R.string.ok), new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         animatedStartActivity(); 
        } 
       }); 
       alert.setCanceledOnTouchOutside(false); 
       alert.show(); 
      } 
      if("fail".equalsIgnoreCase(status)) 
      { 
       progress.setVisibility(View.INVISIBLE); 
       progressBar2.setVisibility(View.INVISIBLE); 
       textsync.setVisibility(View.INVISIBLE); 
       AlertDialog alert =new AlertDialog.Builder(NeliteMusicActivity.this).create(); 
       alert.setTitle(R.string.set4Play); 
       alert.setMessage(getString(R.string.connectionerror)); 
       alert.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
       alert.setButton(getString(R.string.ok), new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         animatedStartActivity(); 
         return; 
        } 
       }); 
       alert.setCanceledOnTouchOutside(false); 
       alert.show(); 
      } 
     } 

     @Override 
     protected void onProgressUpdate(String... values) { 
      super.onProgressUpdate(values); 
      int a = 0; 
      if(!isChange){ 
       a=messag; 
       progress.setProgress(a); 
       textsync.setText("Syncing mix "+c+"/"+list.size()); 
      }else{ 
       progressBar2.setVisibility(View.INVISIBLE); 
       progress.setProgress(0); 
       textsync.setText("Syncing interrupted"); 
      } 
      if(progress.getMax()<=a) 
      { 
         if (isOnline()) 
         { 
          if(NeliteMusicActivity.alertShow==true){ 
          final AlertDialog alert =new AlertDialog.Builder(NeliteMusicActivity.this).create(); 
          alert.setTitle(R.string.set4Play); 
          alert.setMessage(getString(R.string.updatedMix)); 
          alert.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
          alert.setButton(getString(R.string.ok), 
            new DialogInterface.OnClickListener() 
          { 
            public void onClick(DialogInterface dialog, int which) { 
             alert.dismiss(); 
             animatedStartActivity(); 
           } 
           }); 
          alert.setCanceledOnTouchOutside(false); 
          if((alert1 ==null || !alert1.isShowing()) && !alert.isShowing()) 
          alert.show(); 
          } 
         } 
        if (!isOnline()) { 
         if(NeliteMusicActivity.alertShow==true){ 
         final AlertDialog alert =new AlertDialog.Builder(NeliteMusicActivity.this).create(); 
         alert.setTitle(R.string.set4Play); 
         alert.setMessage(getString(R.string.connectionerror)); 
         alert.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
         alert.setButton(getString(R.string.ok), new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int which) { 
            alert.dismiss(); 
            animatedStartActivity(); 
          } 
          }); 
         alert.setCanceledOnTouchOutside(false); 
         if(!alert.isShowing()) 
         alert.show(); 
         } 
        } 
      } 
     } 
    } 

的logcat:

12-04 17:50:27.390: E/WindowManager(8190): Activity com.nelitemusic.NeliteMusicActivity has leaked window [email protected] that was originally added here 
12-04 17:50:27.390: E/WindowManager(8190): android.view.WindowLeaked: Activity com.nelitemusic.NeliteMusicActivity has leaked window [email protected] that was originally added here 
12-04 17:50:27.390: E/WindowManager(8190): at android.view.ViewRoot.<init>(ViewRoot.java:291) 
12-04 17:50:27.390: E/WindowManager(8190): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:249) 
12-04 17:50:27.390: E/WindowManager(8190): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193) 
12-04 17:50:27.390: E/WindowManager(8190): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:118) 
12-04 17:50:27.390: E/WindowManager(8190): at android.view.Window$LocalWindowManager.addView(Window.java:532) 
12-04 17:50:27.390: E/WindowManager(8190): at android.app.Dialog.show(Dialog.java:269) 
12-04 17:50:27.390: E/WindowManager(8190): at com.nelitemusic.NeliteMusicActivity$Communicator.onProgressUpdate(NeliteMusicActivity.java:520) 
12-04 17:50:27.390: E/WindowManager(8190): at com.nelitemusic.NeliteMusicActivity$Communicator.onProgressUpdate(NeliteMusicActivity.java:1) 
12-04 17:50:27.390: E/WindowManager(8190): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:606) 
12-04 17:50:27.390: E/WindowManager(8190): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-04 17:50:27.390: E/WindowManager(8190): at android.os.Looper.loop(Looper.java:132) 
12-04 17:50:27.390: E/WindowManager(8190): at android.app.ActivityThread.main(ActivityThread.java:4126) 
12-04 17:50:27.390: E/WindowManager(8190): at java.lang.reflect.Method.invokeNative(Native Method) 
12-04 17:50:27.390: E/WindowManager(8190): at java.lang.reflect.Method.invoke(Method.java:491) 
12-04 17:50:27.390: E/WindowManager(8190): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 
12-04 17:50:27.390: E/WindowManager(8190): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
12-04 17:50:27.390: E/WindowManager(8190): at dalvik.system.NativeStart.main(Native Method) 
+0

我不知道解決的辦法是什麼。當我在對話框打開的情況下退出活動時,我會始終得到它。似乎是無害的,因爲除了日誌中的錯誤之外,它不會對應用程序做任何事情。 – Ixx

回答

0

一件事,你可以以關閉AlertDialog做,而活動結束,是重寫的onDestroy並關閉它。

@Override 
public void onDestroy(){ 
    try{ 
     alert.dismiss(); 
    } 
    catch(Exception e) {e.printStackTrace();} 
    super.onDestroy() 
} 
+0

這不起作用,仍然給出相同的例外。再次 – bkshukla

+0

嘗試不檢查,如果警報!= NULL && alert.isShowing()。 並確定這是你解僱右側的對話框。 如果這不應該工作,嘗試onStop(),但不明白爲什麼它不應該在onDestroy()中工作。 – Carnal

+0

仍然有相同的例外。 – bkshukla