Sid*_*rma 0 android android-progressbar android-asynctask
我有一个按钮,按下后,执行以下代码:
public void onClick(View v) {
// TODO Auto-generated method stub
//progressSpin.setVisibility(View.VISIBLE);
try {
data=new WebkioskExtractor().execute(username,password).get();
System.out.println("Data = "+data);
} catch (Exception e) {
// TODO Auto-geneorated catch block
e.printStackTrace();
}
//progressSpin.setVisibility(View.GONE);
}
Run Code Online (Sandbox Code Playgroud)
从代码中清楚,我必须等待AsyncTask完成,因为我依赖于它返回的数据.问题是,当执行任务(从互联网上获取一些数据)时,按钮仍处于按下状态.即使我将我创建的进度条设置为VISIBLE,也不会显示.
我怎样才能解决这个问题?我希望按下按钮一次,然后进度条应该开始旋转,这不会发生.
不要用get().
data=new WebkioskExtractor().execute(username,password).get(); // Bad! :(
data=new WebkioskExtractor().execute(username,password); // Good! :)
Run Code Online (Sandbox Code Playgroud)
它阻止了UI你的Button遗体按压的原因.这也是你ProgressBar没有出现的原因(它也在运行UI).我假设你开始你ProgressBar在onPreExecute()和dismiss()它在onPostExecute()你的AsyncTask.如果没有,这就是你应该做的.如果您的其他所有内容都已AsyncTask正确设置,则删除.get()应解决您的问题.
将结果返回doInBackground()到onPostExecute(),这应该给你你想要的.你也可以做任何你需要在UI从onPostExecute()或的任何其他方法AsyncTask之外doInBackground().
进度条
你并不需要设置Visibility的ProgressBar.看这个例子:
public class GetUsersTask extends AsyncTask<Void, Void, Void> {
ProgressDialog progress = ProgressDialog.show(LoginScreen.this, "Downloading Users", "Please wait while users are downloaded");
// you can create it here
@Override
protected void onPreExecute()
{
// show it here like so
progress.setCancelable(false);
progress.isIndeterminate();
progress.show();
}
@Override
protected void onPostExecute(Void result) {
// and dismiss it here
progress.dismiss();
}
}
@Override
protected void onProgressUpdate(Void... values) {
// can update the ProgressBar here if you need to
}
@Override
protected Void doInBackground(Void... params) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果你需要得到的结果从AsyncTask其中是不是一个内部类的活动,那么你可以使用interface一个callBack.更多关于在这个答案中做到这一点
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |