2013-05-21 67 views
1

我在按钮的onclicklistener中定义了一个AsyncTask,并且一旦用户单击该按钮,理想情况下进展对话框显示,同时下载。用户界面延迟显示与asynctask

但是,进度对话框刚刚闪烁并在结果返回之前消失,并且按钮在asynctask在后台工作时获得焦点。

有人可以帮我弄清楚我在这里做错了什么吗?代码片段:

final ProgressDialog progressDialog = new ProgressDialog(context); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 

    ((Button)findViewById(R.id.buttonLoginActivity)).setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AsyncTask<Void, Void, Void> downloadTask= new AsyncTask<Void, Void, Void>(){ 
       @Override 
       protected Void doInBackground(Void... params) { 
        String data = Service.getSomeData(); 
          context.getContentResolver.notifyChange("content://some_url"); 
         return null; 
       } 

       @Override 
       protected void onPostExecute(Void result) { 
        super.onPostExecute(result); 
        if(progressDialog== null) return; 
        if(progressDialog!=null) { 
         progressDialog.dismiss(); 
         progressDialog = null; 
        } 
       } 
      }; 

      progressDialog.show(); 

      downloadTask.execute(); 
      try{ 
       downloadTask.get(); 
      }catch(Exception e){ 
       e.printStackTrace(); 
       return; 
      } 
     } 
    }); 

回答

1

不要使用get()

downloadTask.get(); 

这是一个阻塞调用。来自Docs

如果需要等待计算完成,然后检索其结果。

只需使用​​因为你是那么你需要在onPostExecute()

+0

异步任务,我就给在这一个镜头! – JUL

+0

好吧,您可能还有其他问题,但这是我第一次发现。让我知道它是如何工作的 – codeMagic

+0

它的工作!但是你能否让我知道你在这里找到的其他问题?非常感谢! – JUL

0

的结果是什么节目的progressDialog上需要被writen的onPreExecute,它会在后台UI线程上运行,而不是(安卓4.0)

也是我称之为一个new Handler().post(myAsynctaskcaller)

@Override 
protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog.show(); 
} 
+0

感谢您的建议。下次我会试试这个。干杯! – JUL