asynctask类中的BadTokenException用于在Tabs中添加progressdialog?

时间:2014-07-12 13:45:28

标签: android android-asynctask progressdialog

大家好在我的应用程序中,我在asynctask类中添加了进度对话框,如下所示。这个asynctask在oncreate方法中调用。

class GettingData extends AsyncTask<URL, Integer, Long>
        { 

protected void onPreExecute() 
            {
                dialog=MyProgressDialog.show(getParent(), null,null);
            }
@Override
            protected Long doInBackground(URL... arg0) {
                          try{


                             DefaultHttpClient httpClient = new DefaultHttpClient(); 
                             HttpGet httpPost = new HttpGet(DataUrls.map);
HttpResponse httpResponse = httpClient.execute(httpPost); 
                             HttpEntity httpEntity = httpResponse.getEntity(); 
                             String response = EntityUtils.toString(httpEntity);
}catch(Exception e){
                             e.printStackTrace(); 
                          }

                return null;
            }
            protected void onPostExecute(Long result) {             
                try{
                Map_ExpandableAdapter mNewAdapter = new Map_ExpandableAdapter(MapViewActivity.this,groupItem, childItem,lstMenus,places);
                mNewAdapter.setInflater((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE),MapViewActivity.this);
                lstMenus.setAdapter(mNewAdapter);
//              lstMenus.setOnChildClickListener(MapViewActivity.this);

                UtilsListViewHeight.setListViewHeightBasedOnChildren(lstMenus);
                }catch(Exception e)
                {
                    e.printStackTrace();
                }
                dialog.dismiss();
            }

        }//closing asynchronous process

这是我正在使用的Progressdialog

public class MyProgressDialog extends Dialog {

    public static MyProgressDialog show(Context context, CharSequence title,
            CharSequence message) {
        return show(context, title, message, false);
    }
public MyProgressDialog(Context context) {
        super(context, R.style.NewDialog);
    }
}

在asynctask类中我传递了实例 getParent(),因为我正在使用tabs.But我得到了这样的错误

引起:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌android.os.BinderProxy@441cf040无效;你的活动在运行吗?

所以请告诉我这是什么问题。谢谢所有InAdvanced

2 个答案:

答案 0 :(得分:0)

似乎您没有将当前的Activity作为上下文传递,而是您似乎正在传递当前活动的父级。

替换

dialog=MyProgressDialog.show(getParent(), null,null);

dialog=MyProgressDialog.show(MyActivity.this, null,null);

其中MyActivity是当前活动的名称。

答案 1 :(得分:0)

正如错误所说&#34;您的活动是否正在运行&#34;

你忘记了解雇你的对话 这些事件可能已经发生

  1. 当您切换到其他活动而不关闭已经显示的对话框时 方案: 在切换到其他活动之前,请确保关闭对话框。

  2. 或者当发生异常并且您的活动已关闭但对话框未关闭时..

  3. 解决方案: 我看到你在catch区块中调用dismiss。