2012-12-27 43 views
0

我遇到ProgressBar问题。我之前和进度条一起工作过,从未遇到过这个问题。执行后显示ProgressBar

我有一个按钮,一旦点击,运行一个asynctask,这可能需要很长时间才能完成。所以,我设置了一个ProgressBar来显示按钮被点击的时间。该代码是这一个:

Button btnFollowing = (Button) findViewById(R.id.btnFollowing); 

    final ProgressBar pbFollowing = (ProgressBar) findViewById(R.id.progressBarFollowing); 

    btnFollowing.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      pbFollowing.setVisibility(View.VISIBLE); 
      ArrayList<String> friends = new ArrayList<String>(); 
      try {     
       GetFriends gf = new GetFriends(MainActivity.this); 
       friends = gf.execute("value").get();   
      } catch (InterruptedException e) { 
       Log.e("Exception MainActivity gettingfriends", e.toString()); 
      } catch (ExecutionException e) { 
       Log.e("Exception MainActivity gettingfriends", e.toString()); 
      } 
      setStringArrayPref(MainActivity.this, "friends", friends); 
      pbFollowing.setVisibility(View.INVISIBLE); 
     } 
    }); 

的问题是,在进度条不显示在屏幕上,直到的AsyncTask结束,甚至调用setVisible线作为创建的AsyncTask之前。

为什么会发生这种情况的任何想法?

感谢您的建议!

+0

你为什么把它设置为隐形? – codeMagic

回答

1

的万阿英,蒋达清是这一行:

friends = gf.execute("value").get(); 

执行将在后台启动任务,但调用get(),将等待执行完成,然后返回结果。因此,您的代码将在此行中等待,直到AsyncTask完成,并且之后您的进度条将变得可见,因为您使用get调用阻止了主线程。

您应该调用AsyncTask上的execute方法,然后使用AsyncTask的onPostExecute来执行您在执行结束时需要执行的操作。

+0

它的工作!非常感谢你。 – vdlow

0

的AsyncTask onPre ...将运行在GUI threead,它会显示 的AsyncTask onPOST等将在GUI线程中运行过,你应该解雇/隐藏