gpt4 book ai didi

java - ProgressBar 在 AsyncTask 期间不显示

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:48 25 4
gpt4 key购买 nike

我想在后台做一个简单的任务,并在完成时显示一个进度条。

这是主要(也是唯一) Activity 的代码:

public class Login extends Activity {

public static ProgressDialog progressDialog;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
(...)
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
progressDialog = new ProgressDialog(activity);
progressDialog.setMessage("Sending data...");
progressDialog.setCancelable(false);
(...)
// In some onClick Eevent..
JSONObject result = new Urltasks().execute(...).get();
(...)

}
}

这是 Activity 的代码:

class Urltasks extends AsyncTask<String, Integer, JSONObject>{

protected void onPreExecute() {
System.out.println("Inicia onPreExecute");
Login.progressDialog.show();
}

protected void onPostExecute(String result) {
Login.progressDialog.dismiss();
}

protected JSONObject doInBackground(String... arg0) {
// Some work being done. I do not use Login.progressDialog here
}
}

使用此代码,ProgressDialog 在任务结束时显示,并且不会关闭。

最佳答案

问题在这里:

JSONObject result = new Urltasks().execute(...).get();

AsyncTask 上调用 get() 会阻塞当前线程,即您的 UI 线程,直到执行 AsyncTask。因此进度对话框无法运行。删除 get()

要获取 AsyncTask 的结果,您可以例如将监听器回调传递给在结果可用时收到通知的异步任务:

class YourAsyncTask extends AsyncTask<ParamType, ProgressType, ResultType> {

private YourResultListener mListener;

interface YourResultListener {
void onResultAvailable(ResultType result);
}

YourAsyncTask(YourResultListener listener) {
mListener = listener;
}

@Override protected ResultType doInBackground(ParamType... params) {
//...
}

@Override protected void onPostExecute(ResultType result) {
mListener.onResultAvailable(result);
}
}

你可以像这样使用它:

mProgressDialog.show();
new YourAsyncTask(new YourResultListener() {
@Override void onResultAvailable(ResultType result) {
mProgressDialog.dismiss();
// use result
}).execute(params);

就我个人而言,我喜欢将进度对话框等用户界面元素与异步任务分离。

关于java - ProgressBar 在 AsyncTask 期间不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17838618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com