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