Android 活动在警报解除前关闭

Android 活动在警报解除前关闭,android,Android,在下面给定的代码中,我得到了错误“活动在Alertdialog解除并给出活动泄漏窗口异常之前关闭”,我在onProgressUpdate中的alert.show中得到了异常。解决这个问题的办法是什么 String values[] = { Login.uname, Login.pass }; new Communicator().execute(values); class Communicator extends AsyncTask<S

在下面给定的代码中,我得到了错误“活动在Alertdialog解除并给出活动泄漏窗口异常之前关闭”,我在onProgressUpdate中的alert.show中得到了异常。解决这个问题的办法是什么

 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();
                        }
                    }
            }
        }
    }
字符串值[]={Login.uname,Login.pass};
新建通信器()。执行(值);
类通信器扩展异步任务
{
int prog=0;
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串响应=null;
试一试{
if(Login.uname!=null&&Login.pass!=null){
同步(Login.uname、Login.pass);
}else if(SplashScreen.user!=null&&SplashScreen.pas!=null){
同步(SplashScreen.user,SplashScreen.pas);
}
如果(“正常”。相等信号情况(状态))
{
//否则{
如果(db!=null)
{
如果(Login.uname!=null){
usernam=Login.uname;
}else if(SplashScreen.user!=null){
usernam=SplashScreen.user;
}
Cursor=db.getAllMixes(SplashScreen.user);
if(cursor!=null&&cursor.getCount()>0)
{

Log.e(“>>cursor.getCount()要在活动完成时关闭AlertDialog,可以做的一件事是覆盖onDestroy并在那里关闭它

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

我不知道解决方案是什么。我总是在打开对话框时退出活动时得到它。这似乎是无害的,因为除了日志中的错误之外,它对应用程序没有任何作用。请在不检查alert!=null&&alert.isShowing()的情况下重试。并确保它是您要取消的正确对话框。如果此操作不起作用,请尝试在top()上执行,但看不出为什么在onDestroy()中不起作用。仍然存在相同的异常。
@Override
public void onDestroy(){
    try{
        alert.dismiss();
    }
    catch(Exception e) {e.printStackTrace();}
    super.onDestroy()
}