Android 在BaseAdapter的getView方法中的按钮单击事件中使用Asynctask时无法添加窗口异常?

Android 在BaseAdapter的getView方法中的按钮单击事件中使用Asynctask时无法添加窗口异常?,android,android-asynctask,baseadapter,Android,Android Asynctask,Baseadapter,在baseadapter的getView方法中单击按钮时,我无法在asynctask类的preexecute方法中显示进度对话框。调用pDialog.show()方法id时,我得到“无法添加窗口异常”异常。当我删除预执行方法时,它运行良好。有人能解释为什么会这样吗 这是我的代码: protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(contex

在baseadapter的getView方法中单击按钮时,我无法在asynctask类的preexecute方法中显示进度对话框。调用pDialog.show()方法id时,我得到“无法添加窗口异常”异常。当我删除预执行方法时,它运行良好。有人能解释为什么会这样吗

这是我的代码:

    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(context);
        pDialog.setMessage("Please wait..");
        pDialog.setCancelable(false);
        pDialog.show();  
    }
这是我的按钮点击事件代码:

 holder.buttonid.setOnClickListener(new OnClickListener() 
    {
        @Override
        public void onClick(View v) 
        {
            try 
            {
                new MyAsyncTask().execute();                        
            } catch (Exception e)
            {
                e.printStackTrace();
            }               
        }
    });
这是我的班

公共类FriendListAdapter扩展了BaseAdapter {

私有上下文;
专用充气机=空;
私有ArrayList MDisplayedValue;
静态类视窗夹
{  
ImageView img_friend;
TextView-tvname\u-friend;
按钮btnstatus\u friend;
}
公共FriendListAdapter(上下文,ArrayList ArrayList){
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
this.context=上下文;
this.mDisplayedValues=arrayList;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回mDisplayedValues.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
ViewHolder=null;
if(convertView==null)
{
视图=充气机。充气(右布局。充气视图,父视图,错误);
holder=新的ViewHolder();
holder.buttonid=(Button)view.findViewById(R.id.btnid);
视图.设置标签(支架);
}
其他的
{
holder=(ViewHolder)view.getTag();
}
尝试
{
holder.buttonid.setOnClickListener(新的OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
尝试
{
新建MyAsyncTask().execute();
}捕获(例外e)
{
e、 printStackTrace();
}               
}
});
}捕获(例外e)
{
e、 printStackTrace();
}   
返回视图;
}
私有类MyAsyncTask扩展了AsyncTask{
private ProgressDialog pDialog=null;
私有布尔值hasExceptionOccured=false;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(上下文);
pDialog.setMessage(“请稍候…”);
pDialog.setCancelable(假);
pDialog.show();
} 
@凌驾
受保护的Void doInBackground(字符串…参数){
//TODO自动生成的方法存根
//下一个活动的意图
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
if(pDialog.isShowing())
pDialog.disclose();
}
} 
}

您需要使用活动的上下文来显示对话框

pDialog = new ProgressDialog(YourActivity.this);

更多信息。

上下文在这里的作用是什么?您是在getView()方法中调用MyAsyncTask吗?不是,我是在getView()方法之后在BaseAdapter中调用它。但为什么要在该方法中调用它呢。显示您的BaseAdapter类hereDid您看到第一个问题了吗?什么是语境?应用程序上下文?还是活动上下文?
pDialog = new ProgressDialog(YourActivity.this);