我遇到了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结束之前,ProgressBar不会出现在屏幕上,即使setVisible行在AsyncTask创建之前也是如此。
有关为何发生这种情况的任何想法?
感谢您的建议!
答案 0 :(得分:1)
问题出在这一行:
friends = gf.execute("value").get();
执行将在后台启动任务,但是在其上调用get()将等待执行完成然后返回结果。因此,您的代码将在此行中等待,直到AsyncTask结束,之后您的进度条将变为可见,因为您使用get调用阻止了主线程。
您应该在AsyncTask上调用execute方法,然后使用AsyncTask的onPostExecute来执行您在执行结束时需要执行的操作。
答案 1 :(得分:0)
AsyncTask onPre ...将在GUI threead上运行,它将显示出来 AsyncTask onPost也将在gui线程上运行,你应该解除/隐藏